Rebranch stable from swift-4.1-branch
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f6eed77..f997c53 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,24 +7,14 @@
 # An important constraint of the build is that it only produces libraries
 # based on the ability of the host toolchain to target various platforms.
 
+cmake_minimum_required(VERSION 3.4.3)
+
 # Check if compiler-rt is built as a standalone project.
 if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR COMPILER_RT_STANDALONE_BUILD)
   project(CompilerRT C CXX ASM)
   set(COMPILER_RT_STANDALONE_BUILD TRUE)
 endif()
 
-cmake_minimum_required(VERSION 3.4.3)
-# FIXME:
-# The OLD behavior (pre 3.2) for this policy is to not set the value of the 
-# CMAKE_EXE_LINKER_FLAGS variable in the generated test project. The NEW behavior
-# for this policy is to set the value of the CMAKE_EXE_LINKER_FLAGS variable 
-# in the test project to the same as it is in the calling project. The new 
-# behavior cause the compiler_rt test to fail during try_compile: see
-# projects/compiler-rt/cmake/Modules/CompilerRTUtils.cmake:121 such that
-# CAN_TARGET_${arch} is not set properly. This results in COMPILER_RT_SUPPORTED_ARCH
-# not being updated properly leading to poblems.
-cmake_policy(SET CMP0056 OLD)
-
 # Add path for custom compiler-rt modules.
 list(INSERT CMAKE_MODULE_PATH 0
   "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
@@ -41,6 +31,9 @@
 option(COMPILER_RT_BUILD_XRAY "Build xray" ON)
 mark_as_advanced(COMPILER_RT_BUILD_XRAY)
 
+set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOLEAN
+  "Build for a bare-metal target.")
+
 if (COMPILER_RT_STANDALONE_BUILD)
   load_llvm_config()
 
@@ -87,7 +80,7 @@
 
 include(config-ix)
 
-if(APPLE AND SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.9")
+if(APPLE AND SANITIZER_MIN_OSX_VERSION AND SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.9")
   # Mac OS X prior to 10.9 had problems with exporting symbols from
   # libc++/libc++abi.
   set(use_cxxabi_default OFF)
@@ -142,9 +135,16 @@
 append_list_if(COMPILER_RT_HAS_FNO_SANITIZE_SAFE_STACK_FLAG -fno-sanitize=safe-stack SANITIZER_COMMON_CFLAGS)
 append_list_if(COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG -fvisibility=hidden SANITIZER_COMMON_CFLAGS)
 append_list_if(COMPILER_RT_HAS_FVISIBILITY_INLINES_HIDDEN_FLAG -fvisibility-inlines-hidden SANITIZER_COMMON_CFLAGS)
-append_list_if(COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG -fno-function-sections SANITIZER_COMMON_CFLAGS)
 append_list_if(COMPILER_RT_HAS_FNO_LTO_FLAG -fno-lto SANITIZER_COMMON_CFLAGS)
 
+# The following is a workaround for powerpc64le. This is the only architecture
+# that requires -fno-function-sections to work properly. If lacking, the ASan
+# Linux test function-sections-are-bad.cc fails with the following error:
+# 'undefined symbol: __sanitizer_unaligned_load32'.
+if(DEFINED TARGET_powerpc64le_CFLAGS)
+  append_list_if(COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG -fno-function-sections TARGET_powerpc64le_CFLAGS)
+endif()
+
 if(MSVC)
   # Replace the /M[DT][d] flags with /MT, and strip any definitions of _DEBUG,
   # which cause definition mismatches at link time.
@@ -172,10 +172,16 @@
 
 append_list_if(COMPILER_RT_DEBUG -DSANITIZER_DEBUG=1 SANITIZER_COMMON_CFLAGS)
 
-# Build with optimization, unless we're in debug mode. If we're using MSVC,
+# If we're using MSVC,
 # always respect the optimization flags set by CMAKE_BUILD_TYPE instead.
-if(NOT COMPILER_RT_DEBUG AND NOT MSVC)
-  list(APPEND SANITIZER_COMMON_CFLAGS -O3)
+if (NOT MSVC)
+
+  # Build with optimization, unless we're in debug mode. 
+  if(COMPILER_RT_DEBUG)
+    list(APPEND SANITIZER_COMMON_CFLAGS -O0)
+  else()
+    list(APPEND SANITIZER_COMMON_CFLAGS -O3)
+  endif()
 endif()
 
 # Determine if we should restrict stack frame sizes.
@@ -242,16 +248,26 @@
 if(EXISTS ${COMPILER_RT_LIBCXX_PATH}/)
   set(COMPILER_RT_HAS_LIBCXX_SOURCES TRUE)
 else()
-  set(COMPILER_RT_HAS_LIBCXX_SOURCES FALSE)
+  set(COMPILER_RT_LIBCXX_PATH ${LLVM_MAIN_SRC_DIR}/../libcxx)
+  if(EXISTS ${COMPILER_RT_LIBCXX_PATH}/)
+    set(COMPILER_RT_HAS_LIBCXX_SOURCES TRUE)
+  else()
+    set(COMPILER_RT_HAS_LIBCXX_SOURCES FALSE)
+  endif()
 endif()
 
 set(COMPILER_RT_LLD_PATH ${LLVM_MAIN_SRC_DIR}/tools/lld)
-if(EXISTS ${COMPILER_RT_LLD_PATH}/)
-  set(COMPILER_RT_HAS_LLD_SOURCES TRUE)
+if(EXISTS ${COMPILER_RT_LLD_PATH}/ AND LLVM_TOOL_LLD_BUILD)
+  set(COMPILER_RT_HAS_LLD TRUE)
 else()
-  set(COMPILER_RT_HAS_LLD_SOURCES FALSE)
+  set(COMPILER_RT_LLD_PATH ${LLVM_MAIN_SRC_DIR}/../lld)
+  if(EXISTS ${COMPILER_RT_LLD_PATH}/ AND LLVM_TOOL_LLD_BUILD)
+    set(COMPILER_RT_HAS_LLD TRUE)
+  else()
+    set(COMPILER_RT_HAS_LLD FALSE)
+  endif()
 endif()
-pythonize_bool(COMPILER_RT_HAS_LLD_SOURCES)
+pythonize_bool(COMPILER_RT_HAS_LLD)
 
 add_subdirectory(lib)
 
diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake
index a84aba4..bc5fb9f 100644
--- a/cmake/Modules/AddCompilerRT.cmake
+++ b/cmake/Modules/AddCompilerRT.cmake
@@ -110,6 +110,13 @@
     "OS;ARCHS;SOURCES;CFLAGS;LINK_FLAGS;DEFS;LINK_LIBS;OBJECT_LIBS"
     ${ARGN})
   set(libnames)
+  # Until we support this some other way, build compiler-rt runtime without LTO
+  # to allow non-LTO projects to link with it.
+  if(COMPILER_RT_HAS_FNO_LTO_FLAG)
+    set(NO_LTO_FLAGS "-fno-lto")
+  else()
+    set(NO_LTO_FLAGS "")
+  endif()
   if(APPLE)
     foreach(os ${LIB_OS})
       if(type STREQUAL "STATIC")
@@ -121,7 +128,7 @@
       list_intersect(LIB_ARCHS_${libname} DARWIN_${os}_ARCHS LIB_ARCHS)
       if(LIB_ARCHS_${libname})
         list(APPEND libnames ${libname})
-        set(extra_cflags_${libname} ${DARWIN_${os}_CFLAGS} ${LIB_CFLAGS})
+        set(extra_cflags_${libname} ${DARWIN_${os}_CFLAGS} ${NO_LTO_FLAGS} ${LIB_CFLAGS})
         set(output_name_${libname} ${libname}${COMPILER_RT_OS_SUFFIX})
         set(sources_${libname} ${LIB_SOURCES})
         format_object_libs(sources_${libname} ${os} ${LIB_OBJECT_LIBS})
@@ -149,7 +156,7 @@
       set(sources_${libname} ${LIB_SOURCES})
       format_object_libs(sources_${libname} ${arch} ${LIB_OBJECT_LIBS})
       set(libnames ${libnames} ${libname})
-      set(extra_cflags_${libname} ${TARGET_${arch}_CFLAGS} ${LIB_CFLAGS})
+      set(extra_cflags_${libname} ${TARGET_${arch}_CFLAGS} ${NO_LTO_FLAGS} ${LIB_CFLAGS})
     endforeach()
   endif()
 
@@ -388,6 +395,7 @@
                -DCMAKE_BUILD_TYPE=Release
                -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
                -DLLVM_PATH=${LLVM_MAIN_SRC_DIR}
+               -DLIBCXX_STANDALONE_BUILD=On
     LOG_BUILD 1
     LOG_CONFIGURE 1
     LOG_INSTALL 1
diff --git a/cmake/Modules/CompilerRTDarwinUtils.cmake b/cmake/Modules/CompilerRTDarwinUtils.cmake
index 3c89381..f646975 100644
--- a/cmake/Modules/CompilerRTDarwinUtils.cmake
+++ b/cmake/Modules/CompilerRTDarwinUtils.cmake
@@ -4,14 +4,23 @@
 # set the default Xcode to use. This function finds the SDKs that are present in
 # the current Xcode.
 function(find_darwin_sdk_dir var sdk_name)
-  # Let's first try the internal SDK, otherwise use the public SDK.
-  execute_process(
-    COMMAND xcodebuild -version -sdk ${sdk_name}.internal Path
-    RESULT_VARIABLE result_process
-    OUTPUT_VARIABLE var_internal
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-    ERROR_FILE /dev/null
-  )
+  set(DARWIN_${sdk_name}_CACHED_SYSROOT "" CACHE STRING "Darwin SDK path for SDK ${sdk_name}.")
+  set(DARWIN_PREFER_PUBLIC_SDK OFF CACHE BOOL "Prefer Darwin public SDK, even when an internal SDK is present.")
+
+  if(DARWIN_${sdk_name}_CACHED_SYSROOT)
+    set(${var} ${DARWIN_${sdk_name}_CACHED_SYSROOT} PARENT_SCOPE)
+    return()
+  endif()
+  if(NOT DARWIN_PREFER_PUBLIC_SDK)
+    # Let's first try the internal SDK, otherwise use the public SDK.
+    execute_process(
+      COMMAND xcodebuild -version -sdk ${sdk_name}.internal Path
+      RESULT_VARIABLE result_process
+      OUTPUT_VARIABLE var_internal
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+      ERROR_FILE /dev/null
+    )
+  endif()
   if((NOT result_process EQUAL 0) OR "" STREQUAL "${var_internal}")
     execute_process(
       COMMAND xcodebuild -version -sdk ${sdk_name} Path
@@ -26,6 +35,7 @@
   if(result_process EQUAL 0)
     set(${var} ${var_internal} PARENT_SCOPE)
   endif()
+  set(DARWIN_${sdk_name}_CACHED_SYSROOT ${var_internal} CACHE STRING "Darwin SDK path for SDK ${sdk_name}." FORCE)
 endfunction()
 
 # There isn't a clear mapping of what architectures are supported with a given
@@ -85,10 +95,12 @@
     if(TEST_COMPILE_ONLY)
       try_compile_only(CAN_TARGET_${os}_${arch} -v -arch ${arch} ${DARWIN_${os}_CFLAGS})
     else()
+      set(SAVED_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
+      set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${arch_linker_flags}")
       try_compile(CAN_TARGET_${os}_${arch} ${CMAKE_BINARY_DIR} ${SIMPLE_C}
                   COMPILE_DEFINITIONS "-v -arch ${arch}" ${DARWIN_${os}_CFLAGS}
-                  CMAKE_FLAGS "-DCMAKE_EXE_LINKER_FLAGS=${arch_linker_flags}"
                   OUTPUT_VARIABLE TEST_OUTPUT)
+      set(CMAKE_EXE_LINKER_FLAGS ${SAVED_CMAKE_EXE_LINKER_FLAGS})
     endif()
     if(${CAN_TARGET_${os}_${arch}})
       list(APPEND working_archs ${arch})
diff --git a/cmake/Modules/CompilerRTUtils.cmake b/cmake/Modules/CompilerRTUtils.cmake
index c337523..3b3a0c1 100644
--- a/cmake/Modules/CompilerRTUtils.cmake
+++ b/cmake/Modules/CompilerRTUtils.cmake
@@ -138,15 +138,16 @@
     elseif(TEST_COMPILE_ONLY)
       try_compile_only(CAN_TARGET_${arch} ${TARGET_${arch}_CFLAGS})
     else()
-      set(argstring "${CMAKE_EXE_LINKER_FLAGS} ${argstring}")
       set(FLAG_NO_EXCEPTIONS "")
       if(COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG)
         set(FLAG_NO_EXCEPTIONS " -fno-exceptions ")
       endif()
+      set(SAVED_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
+      set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${argstring}")
       try_compile(CAN_TARGET_${arch} ${CMAKE_BINARY_DIR} ${SIMPLE_SOURCE}
                   COMPILE_DEFINITIONS "${TARGET_${arch}_CFLAGS} ${FLAG_NO_EXCEPTIONS}"
-                  OUTPUT_VARIABLE TARGET_${arch}_OUTPUT
-                  CMAKE_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${argstring}")
+                  OUTPUT_VARIABLE TARGET_${arch}_OUTPUT)
+      set(CMAKE_EXE_LINKER_FLAGS ${SAVED_CMAKE_EXE_LINKER_FLAGS})
     endif()
   endif()
   if(${CAN_TARGET_${arch}})
@@ -225,7 +226,8 @@
     RESULT_VARIABLE HAD_ERROR
     OUTPUT_VARIABLE CONFIG_OUTPUT)
   if(NOT HAD_ERROR)
-    string(STRIP "${CONFIG_OUTPUT}" LLVM_CMAKE_PATH)
+    string(STRIP "${CONFIG_OUTPUT}" LLVM_CMAKE_PATH_FROM_LLVM_CONFIG)
+    file(TO_CMAKE_PATH ${LLVM_CMAKE_PATH_FROM_LLVM_CONFIG} LLVM_CMAKE_PATH)
   else()
     file(TO_CMAKE_PATH ${LLVM_BINARY_DIR} LLVM_BINARY_DIR_CMAKE_STYLE)
     set(LLVM_CMAKE_PATH "${LLVM_BINARY_DIR_CMAKE_STYLE}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
diff --git a/cmake/base-config-ix.cmake b/cmake/base-config-ix.cmake
index 71d1499..b38c6ca 100644
--- a/cmake/base-config-ix.cmake
+++ b/cmake/base-config-ix.cmake
@@ -63,7 +63,9 @@
   set(COMPILER_RT_TEST_COMPILER_ID GNU)
 endif()
 
-string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
+if(NOT DEFINED COMPILER_RT_OS_DIR)
+  string(TOLOWER ${CMAKE_SYSTEM_NAME} COMPILER_RT_OS_DIR)
+endif()
 set(COMPILER_RT_LIBRARY_OUTPUT_DIR
   ${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
 set(COMPILER_RT_LIBRARY_INSTALL_DIR
@@ -172,6 +174,7 @@
       else()
         test_target_arch(arm "" "-march=armv7-a" "-mfloat-abi=soft")
         test_target_arch(armhf "" "-march=armv7-a" "-mfloat-abi=hard")
+        test_target_arch(armv6m "" "-march=armv6m" "-mfloat-abi=soft")
       endif()
     elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "aarch32")
       test_target_arch(aarch32 "" "-march=armv8-a")
diff --git a/cmake/builtin-config-ix.cmake b/cmake/builtin-config-ix.cmake
index 8cb4ca1..20bc684 100644
--- a/cmake/builtin-config-ix.cmake
+++ b/cmake/builtin-config-ix.cmake
@@ -24,7 +24,7 @@
 
 
 set(ARM64 aarch64)
-set(ARM32 arm armhf)
+set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k)
 set(X86 i386 i686)
 set(X86_64 x86_64)
 set(MIPS32 mips mipsel)
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake
index e84a066..c329c6a 100644
--- a/cmake/config-ix.cmake
+++ b/cmake/config-ix.cmake
@@ -31,6 +31,7 @@
 check_cxx_compiler_flag("-Werror -msse3" COMPILER_RT_HAS_MSSE3_FLAG)
 check_cxx_compiler_flag("-Werror -msse4.2"   COMPILER_RT_HAS_MSSE4_2_FLAG)
 check_cxx_compiler_flag(--sysroot=.          COMPILER_RT_HAS_SYSROOT_FLAG)
+check_cxx_compiler_flag("-Werror -mcrc"      COMPILER_RT_HAS_MCRC_FLAG)
 
 if(NOT WIN32 AND NOT CYGWIN)
   # MinGW warns if -fvisibility-inlines-hidden is used.
@@ -163,7 +164,12 @@
 set(ALL_ASAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64}
     ${MIPS32} ${MIPS64} ${PPC64} ${S390X})
 set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64})
-set(ALL_LSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64})
+
+if(APPLE)
+  set(ALL_LSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${MIPS64} ${ARM64})
+else()
+  set(ALL_LSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${MIPS64} ${ARM64} ${ARM32})
+endif()
 set(ALL_MSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64} ${PPC64})
 set(ALL_PROFILE_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${PPC64}
     ${MIPS32} ${MIPS64} ${S390X})
@@ -173,8 +179,8 @@
 set(ALL_SAFESTACK_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM64} ${MIPS32} ${MIPS64})
 set(ALL_CFI_SUPPORTED_ARCH ${X86} ${X86_64} ${MIPS64})
 set(ALL_ESAN_SUPPORTED_ARCH ${X86_64} ${MIPS64})
-set(ALL_SCUDO_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32})
-set(ALL_XRAY_SUPPORTED_ARCH ${X86_64} ${ARM32} ${ARM64})
+set(ALL_SCUDO_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${MIPS32} ${MIPS64})
+set(ALL_XRAY_SUPPORTED_ARCH ${X86_64} ${ARM32} ${ARM64} ${MIPS32} ${MIPS64} powerpc64le)
 
 if(APPLE)
   include(CompilerRTDarwinUtils)
@@ -297,9 +303,7 @@
         if(DARWIN_${platform}sim_ARCHS)
           list(APPEND SANITIZER_COMMON_SUPPORTED_OS ${platform}sim)
           list(APPEND PROFILE_SUPPORTED_OS ${platform}sim)
-          if(DARWIN_${platform}_SYSROOT_INTERNAL)
-            list(APPEND TSAN_SUPPORTED_OS ${platform}sim)
-          endif()
+          list(APPEND TSAN_SUPPORTED_OS ${platform}sim)
         endif()
         foreach(arch ${DARWIN_${platform}sim_ARCHS})
           list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
@@ -324,6 +328,7 @@
         if(DARWIN_${platform}_ARCHS)
           list(APPEND SANITIZER_COMMON_SUPPORTED_OS ${platform})
           list(APPEND PROFILE_SUPPORTED_OS ${platform})
+          list(APPEND TSAN_SUPPORTED_OS ${platform})
         endif()
         foreach(arch ${DARWIN_${platform}_ARCHS})
           list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
@@ -470,7 +475,7 @@
 endif()
 
 if (COMPILER_RT_HAS_SANITIZER_COMMON AND LSAN_SUPPORTED_ARCH AND
-    OS_NAME MATCHES "Linux|FreeBSD")
+    OS_NAME MATCHES "Darwin|Linux|FreeBSD")
   set(COMPILER_RT_HAS_LSAN TRUE)
 else()
   set(COMPILER_RT_HAS_LSAN FALSE)
@@ -484,21 +489,21 @@
 endif()
 
 if (PROFILE_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND
-    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows")
+    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android")
   set(COMPILER_RT_HAS_PROFILE TRUE)
 else()
   set(COMPILER_RT_HAS_PROFILE FALSE)
 endif()
 
 if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND
-    OS_NAME MATCHES "Darwin|Linux|FreeBSD")
+    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Android")
   set(COMPILER_RT_HAS_TSAN TRUE)
 else()
   set(COMPILER_RT_HAS_TSAN FALSE)
 endif()
 
 if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND
-    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows")
+    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android")
   set(COMPILER_RT_HAS_UBSAN TRUE)
 else()
   set(COMPILER_RT_HAS_UBSAN FALSE)
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 1f8b481..ec3bf40 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -1,17 +1,23 @@
-set(SANITIZER_HEADERS
-  sanitizer/allocator_interface.h
-  sanitizer/asan_interface.h
-  sanitizer/common_interface_defs.h
-  sanitizer/coverage_interface.h
-  sanitizer/dfsan_interface.h
-  sanitizer/esan_interface.h
-  sanitizer/linux_syscall_hooks.h
-  sanitizer/lsan_interface.h
-  sanitizer/msan_interface.h
-  sanitizer/tsan_interface_atomic.h)
+if (COMPILER_RT_BUILD_SANITIZERS)
+  set(SANITIZER_HEADERS
+    sanitizer/allocator_interface.h
+    sanitizer/asan_interface.h
+    sanitizer/common_interface_defs.h
+    sanitizer/coverage_interface.h
+    sanitizer/dfsan_interface.h
+    sanitizer/esan_interface.h
+    sanitizer/linux_syscall_hooks.h
+    sanitizer/lsan_interface.h
+    sanitizer/msan_interface.h
+    sanitizer/tsan_interface.h
+    sanitizer/tsan_interface_atomic.h)
+endif(COMPILER_RT_BUILD_SANITIZERS)
 
-set(XRAY_HEADERS
-  xray/xray_interface.h)
+if (COMPILER_RT_BUILD_XRAY)
+  set(XRAY_HEADERS
+    xray/xray_interface.h
+    xray/xray_log_interface.h)
+endif(COMPILER_RT_BUILD_XRAY)
 
 set(COMPILER_RT_HEADERS
   ${SANITIZER_HEADERS}
diff --git a/include/sanitizer/common_interface_defs.h b/include/sanitizer/common_interface_defs.h
index f9f9302..4a1de96 100644
--- a/include/sanitizer/common_interface_defs.h
+++ b/include/sanitizer/common_interface_defs.h
@@ -158,8 +158,10 @@
   // Prints stack traces for all live heap allocations ordered by total
   // allocation size until `top_percent` of total live heap is shown.
   // `top_percent` should be between 1 and 100.
+  // At most `max_number_of_contexts` contexts (stack traces) is printed.
   // Experimental feature currently available only with asan on Linux/x86_64.
-  void __sanitizer_print_memory_profile(size_t top_percent);
+  void __sanitizer_print_memory_profile(size_t top_percent,
+                                        size_t max_number_of_contexts);
 
   // Fiber annotation interface.
   // Before switching to a different stack, one must call
diff --git a/include/sanitizer/coverage_interface.h b/include/sanitizer/coverage_interface.h
index b44c5ac..637379d 100644
--- a/include/sanitizer/coverage_interface.h
+++ b/include/sanitizer/coverage_interface.h
@@ -19,8 +19,6 @@
 extern "C" {
 #endif
 
-  // Initialize coverage.
-  void __sanitizer_cov_init();
   // Record and dump coverage info.
   void __sanitizer_cov_dump();
 
@@ -28,42 +26,6 @@
   //  .sancov files.
   void __sanitizer_dump_coverage(const uintptr_t *pcs, uintptr_t len);
 
-  // Open <name>.sancov.packed in the coverage directory and return the file
-  // descriptor. Returns -1 on failure, or if coverage dumping is disabled.
-  // This is intended for use by sandboxing code.
-  intptr_t __sanitizer_maybe_open_cov_file(const char *name);
-  // Get the number of unique covered blocks (or edges).
-  // This can be useful for coverage-directed in-process fuzzers.
-  uintptr_t __sanitizer_get_total_unique_coverage();
-  // Get the number of unique indirect caller-callee pairs.
-  uintptr_t __sanitizer_get_total_unique_caller_callee_pairs();
-
-  // Reset the basic-block (edge) coverage to the initial state.
-  // Useful for in-process fuzzing to start collecting coverage from scratch.
-  // Experimental, will likely not work for multi-threaded process.
-  void __sanitizer_reset_coverage();
-  // Set *data to the array of covered PCs and return the size of that array.
-  // Some of the entries in *data will be zero.
-  uintptr_t __sanitizer_get_coverage_guards(uintptr_t **data);
-
-  // The coverage instrumentation may optionally provide imprecise counters.
-  // Rather than exposing the counter values to the user we instead map
-  // the counters to a bitset.
-  // Every counter is associated with 8 bits in the bitset.
-  // We define 8 value ranges: 1, 2, 3, 4-7, 8-15, 16-31, 32-127, 128+
-  // The i-th bit is set to 1 if the counter value is in the i-th range.
-  // This counter-based coverage implementation is *not* thread-safe.
-
-  // Returns the number of registered coverage counters.
-  uintptr_t __sanitizer_get_number_of_counters();
-  // Updates the counter 'bitset', clears the counters and returns the number of
-  // new bits in 'bitset'.
-  // If 'bitset' is nullptr, only clears the counters.
-  // Otherwise 'bitset' should be at least
-  // __sanitizer_get_number_of_counters bytes long and 8-aligned.
-  uintptr_t
-  __sanitizer_update_counter_bitset_and_clear_counters(uint8_t *bitset);
-
 #ifdef __cplusplus
 }  // extern "C"
 #endif
diff --git a/include/sanitizer/tsan_interface.h b/include/sanitizer/tsan_interface.h
new file mode 100644
index 0000000..5ea09ab
--- /dev/null
+++ b/include/sanitizer/tsan_interface.h
@@ -0,0 +1,138 @@
+//===-- tsan_interface.h ----------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of ThreadSanitizer (TSan), a race detector.
+//
+// Public interface header for TSan.
+//===----------------------------------------------------------------------===//
+#ifndef SANITIZER_TSAN_INTERFACE_H
+#define SANITIZER_TSAN_INTERFACE_H
+
+#include <sanitizer/common_interface_defs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// __tsan_release establishes a happens-before relation with a preceding
+// __tsan_acquire on the same address.
+void __tsan_acquire(void *addr);
+void __tsan_release(void *addr);
+
+// Annotations for custom mutexes.
+// The annotations allow to get better reports (with sets of locked mutexes),
+// detect more types of bugs (e.g. mutex misuses, races between lock/unlock and
+// destruction and potential deadlocks) and improve precision and performance
+// (by ignoring individual atomic operations in mutex code). However, the
+// downside is that annotated mutex code itself is not checked for correctness.
+
+// Mutex creation flags are passed to __tsan_mutex_create annotation.
+// If mutex has no constructor and __tsan_mutex_create is not called,
+// the flags may be passed to __tsan_mutex_pre_lock/__tsan_mutex_post_lock
+// annotations.
+
+// Mutex has static storage duration and no-op constructor and destructor.
+// This effectively makes tsan ignore destroy annotation.
+const unsigned __tsan_mutex_linker_init      = 1 << 0;
+// Mutex is write reentrant.
+const unsigned __tsan_mutex_write_reentrant  = 1 << 1;
+// Mutex is read reentrant.
+const unsigned __tsan_mutex_read_reentrant   = 1 << 2;
+
+// Mutex operation flags:
+
+// Denotes read lock operation.
+const unsigned __tsan_mutex_read_lock        = 1 << 3;
+// Denotes try lock operation.
+const unsigned __tsan_mutex_try_lock         = 1 << 4;
+// Denotes that a try lock operation has failed to acquire the mutex.
+const unsigned __tsan_mutex_try_lock_failed  = 1 << 5;
+// Denotes that the lock operation acquires multiple recursion levels.
+// Number of levels is passed in recursion parameter.
+// This is useful for annotation of e.g. Java builtin monitors,
+// for which wait operation releases all recursive acquisitions of the mutex.
+const unsigned __tsan_mutex_recursive_lock   = 1 << 6;
+// Denotes that the unlock operation releases all recursion levels.
+// Number of released levels is returned and later must be passed to
+// the corresponding __tsan_mutex_post_lock annotation.
+const unsigned __tsan_mutex_recursive_unlock = 1 << 7;
+
+// Annotate creation of a mutex.
+// Supported flags: mutex creation flags.
+void __tsan_mutex_create(void *addr, unsigned flags);
+
+// Annotate destruction of a mutex.
+// Supported flags:
+//   - __tsan_mutex_linker_init
+void __tsan_mutex_destroy(void *addr, unsigned flags);
+
+// Annotate start of lock operation.
+// Supported flags:
+//   - __tsan_mutex_read_lock
+//   - __tsan_mutex_try_lock
+//   - all mutex creation flags
+void __tsan_mutex_pre_lock(void *addr, unsigned flags);
+
+// Annotate end of lock operation.
+// Supported flags:
+//   - __tsan_mutex_read_lock (must match __tsan_mutex_pre_lock)
+//   - __tsan_mutex_try_lock (must match __tsan_mutex_pre_lock)
+//   - __tsan_mutex_try_lock_failed
+//   - __tsan_mutex_recursive_lock
+//   - all mutex creation flags
+void __tsan_mutex_post_lock(void *addr, unsigned flags, int recursion);
+
+// Annotate start of unlock operation.
+// Supported flags:
+//   - __tsan_mutex_read_lock
+//   - __tsan_mutex_recursive_unlock
+int __tsan_mutex_pre_unlock(void *addr, unsigned flags);
+
+// Annotate end of unlock operation.
+// Supported flags:
+//   - __tsan_mutex_read_lock (must match __tsan_mutex_pre_unlock)
+void __tsan_mutex_post_unlock(void *addr, unsigned flags);
+
+// Annotate start/end of notify/signal/broadcast operation.
+// Supported flags: none.
+void __tsan_mutex_pre_signal(void *addr, unsigned flags);
+void __tsan_mutex_post_signal(void *addr, unsigned flags);
+
+// Annotate start/end of a region of code where lock/unlock/signal operation
+// diverts to do something else unrelated to the mutex. This can be used to
+// annotate, for example, calls into cooperative scheduler or contention
+// profiling code.
+// These annotations must be called only from within
+// __tsan_mutex_pre/post_lock, __tsan_mutex_pre/post_unlock,
+// __tsan_mutex_pre/post_signal regions.
+// Supported flags: none.
+void __tsan_mutex_pre_divert(void *addr, unsigned flags);
+void __tsan_mutex_post_divert(void *addr, unsigned flags);
+
+// External race detection API.
+// Can be used by non-instrumented libraries to detect when their objects are
+// being used in an unsafe manner.
+//   - __tsan_external_read/__tsan_external_write annotates the logical reads
+//       and writes of the object at the specified address. 'caller_pc' should
+//       be the PC of the library user, which the library can obtain with e.g.
+//       `__builtin_return_address(0)`.
+//   - __tsan_external_register_tag registers a 'tag' with the specified name,
+//       which is later used in read/write annotations to denote the object type
+//   - __tsan_external_assign_tag can optionally mark a heap object with a tag
+void *__tsan_external_register_tag(const char *object_type);
+void __tsan_external_register_header(void *tag, const char *header);
+void __tsan_external_assign_tag(void *addr, void *tag);
+void __tsan_external_read(void *addr, void *caller_pc, void *tag);
+void __tsan_external_write(void *addr, void *caller_pc, void *tag);
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif  // SANITIZER_TSAN_INTERFACE_H
diff --git a/include/xray/xray_interface.h b/include/xray/xray_interface.h
index 9e712b1..5646134 100644
--- a/include/xray/xray_interface.h
+++ b/include/xray/xray_interface.h
@@ -1,4 +1,4 @@
-//===-- xray_interface.h ----------------------------------------*- C++ -*-===//
+//===- xray_interface.h -----------------------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -11,41 +11,69 @@
 //
 // APIs for controlling XRay functionality explicitly.
 //===----------------------------------------------------------------------===//
+
 #ifndef XRAY_XRAY_INTERFACE_H
 #define XRAY_XRAY_INTERFACE_H
 
+#include <cstddef>
 #include <cstdint>
 
 extern "C" {
 
-enum XRayEntryType { ENTRY = 0, EXIT = 1, TAIL = 2 };
+/// Synchronize this with AsmPrinter::SledKind in LLVM.
+enum XRayEntryType {
+  ENTRY = 0,
+  EXIT = 1,
+  TAIL = 2,
+  LOG_ARGS_ENTRY = 3,
+  CUSTOM_EVENT = 4,
+};
 
-// Provide a function to invoke for when instrumentation points are hit. This is
-// a user-visible control surface that overrides the default implementation. The
-// function provided should take the following arguments:
-//
-//   - function id: an identifier that indicates the id of a function; this id
-//                  is generated by xray; the mapping between the function id
-//                  and the actual function pointer is available through
-//                  __xray_table.
-//   - entry type: identifies what kind of instrumentation point was encountered
-//                 (function entry, function exit, etc.). See the enum
-//                 XRayEntryType for more details.
-//
-// The user handler must handle correctly spurious calls after this handler is
-// removed or replaced with another handler, because it would be too costly for
-// XRay runtime to avoid spurious calls.
-// To prevent circular calling, the handler function itself and all its
-// direct&indirect callees must not be instrumented with XRay, which can be
-// achieved by marking them all with: __attribute__((xray_never_instrument))
-//
-// Returns 1 on success, 0 on error.
+/// Provide a function to invoke for when instrumentation points are hit. This
+/// is a user-visible control surface that overrides the default implementation.
+/// The function provided should take the following arguments:
+///
+///   - function id: an identifier that indicates the id of a function; this id
+///                  is generated by xray; the mapping between the function id
+///                  and the actual function pointer is available through
+///                  __xray_table.
+///   - entry type: identifies what kind of instrumentation point was
+///                 encountered (function entry, function exit, etc.). See the
+///                 enum XRayEntryType for more details.
+///
+/// The user handler must handle correctly spurious calls after this handler is
+/// removed or replaced with another handler, because it would be too costly for
+/// XRay runtime to avoid spurious calls.
+/// To prevent circular calling, the handler function itself and all its
+/// direct&indirect callees must not be instrumented with XRay, which can be
+/// achieved by marking them all with: __attribute__((xray_never_instrument))
+///
+/// Returns 1 on success, 0 on error.
 extern int __xray_set_handler(void (*entry)(int32_t, XRayEntryType));
 
-// This removes whatever the currently provided handler is. Returns 1 on
-// success, 0 on error.
+/// This removes whatever the currently provided handler is. Returns 1 on
+/// success, 0 on error.
 extern int __xray_remove_handler();
 
+/// Use XRay to log the first argument of each (instrumented) function call.
+/// When this function exits, all threads will have observed the effect and
+/// start logging their subsequent affected function calls (if patched).
+///
+/// Returns 1 on success, 0 on error.
+extern int __xray_set_handler_arg1(void (*entry)(int32_t, XRayEntryType,
+                                                 uint64_t));
+
+/// Disables the XRay handler used to log first arguments of function calls.
+/// Returns 1 on success, 0 on error.
+extern int __xray_remove_handler_arg1();
+
+/// Provide a function to invoke when XRay encounters a custom event.
+extern int __xray_set_customevent_handler(void (*entry)(void*, std::size_t));
+
+/// This removes whatever the currently provided custom event handler is.
+/// Returns 1 on success, 0 on error.
+extern int __xray_remove_customevent_handler();
+
 enum XRayPatchingStatus {
   NOT_INITIALIZED = 0,
   SUCCESS = 1,
@@ -53,13 +81,31 @@
   FAILED = 3,
 };
 
-// This tells XRay to patch the instrumentation points. See XRayPatchingStatus
-// for possible result values.
+/// This tells XRay to patch the instrumentation points. See XRayPatchingStatus
+/// for possible result values.
 extern XRayPatchingStatus __xray_patch();
 
-// Reverses the effect of __xray_patch(). See XRayPatchingStatus for possible
-// result values.
+/// Reverses the effect of __xray_patch(). See XRayPatchingStatus for possible
+/// result values.
 extern XRayPatchingStatus __xray_unpatch();
-}
 
-#endif
+/// This patches a specific function id. See XRayPatchingStatus for possible
+/// result values.
+extern XRayPatchingStatus __xray_patch_function(int32_t FuncId);
+
+/// This unpatches a specific function id. See XRayPatchingStatus for possible
+/// result values.
+extern XRayPatchingStatus __xray_unpatch_function(int32_t FuncId);
+
+/// This function returns the address of the function provided a valid function
+/// id. We return 0 if we encounter any error, even if 0 may be a valid function
+/// address.
+extern uintptr_t __xray_function_address(int32_t FuncId);
+
+/// This function returns the maximum valid function id. Returns 0 if we
+/// encounter errors (when there are no instrumented functions, etc.).
+extern size_t __xray_max_function_id();
+
+} // end extern "C"
+
+#endif // XRAY_XRAY_INTERFACE_H
diff --git a/include/xray/xray_log_interface.h b/include/xray/xray_log_interface.h
new file mode 100644
index 0000000..cdb2009
--- /dev/null
+++ b/include/xray/xray_log_interface.h
@@ -0,0 +1,231 @@
+//===-- xray_log_interface.h ----------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a function call tracing system.
+//
+// APIs for installing a new logging implementation.
+//
+//===----------------------------------------------------------------------===//
+///
+/// XRay allows users to implement their own logging handlers and install them
+/// to replace the default runtime-controllable implementation that comes with
+/// compiler-rt/xray. The "flight data recorder" (FDR) mode implementation uses
+/// this API to install itself in an XRay-enabled binary. See
+/// compiler-rt/lib/xray_fdr_logging.{h,cc} for details of that implementation.
+///
+/// The high-level usage pattern for these APIs look like the following:
+///
+///   // Before we try initializing the log implementation, we must set it as
+///   // the log implementation. We provide the function pointers that define
+///   // the various initialization, finalization, and other pluggable hooks
+///   // that we need.
+///   __xray_set_log_impl({...});
+///
+///   // Once that's done, we can now initialize the implementation. Each
+///   // implementation has a chance to let users customize the implementation
+///   // with a struct that their implementation supports. Roughly this might
+///   // look like:
+///   MyImplementationOptions opts;
+///   opts.enable_feature = true;
+///   ...
+///   auto init_status = __xray_log_init(
+///       BufferSize, MaxBuffers, &opts, sizeof opts);
+///   if (init_status != XRayLogInitStatus::XRAY_LOG_INITIALIZED) {
+///     // deal with the error here, if there is one.
+///   }
+///
+///   // When the log implementation has had the chance to initialize, we can
+///   // now patch the sleds.
+///   auto patch_status = __xray_patch();
+///   if (patch_status != XRayPatchingStatus::SUCCESS) {
+///     // deal with the error here, if it is an error.
+///   }
+///
+///   // If we want to stop the implementation, we can then finalize it (before
+///   // optionally flushing the log).
+///   auto fin_status = __xray_log_finalize();
+///   if (fin_status != XRayLogInitStatus::XRAY_LOG_FINALIZED) {
+///     // deal with the error here, if it is an error.
+///   }
+///
+///   // We can optionally wait before flushing the log to give other threads a
+///   // chance to see that the implementation is already finalized. Also, at
+///   // this point we can optionally unpatch the sleds to reduce overheads at
+///   // runtime.
+///   auto unpatch_status = __xray_unpatch();
+///   if (unpatch_status != XRayPatchingStatus::SUCCESS) {
+//      // deal with the error here, if it is an error.
+//    }
+///
+///   // If there are logs or data to be flushed somewhere, we can do so only
+///   // after we've finalized the log. Some implementations may not actually
+///   // have anything to log (it might keep the data in memory, or periodically
+///   // be logging the data anyway).
+///   auto flush_status = __xray_log_flushLog();
+///   if (flush_status != XRayLogFlushStatus::XRAY_LOG_FLUSHED) {
+///     // deal with the error here, if it is an error.
+///   }
+///
+///
+/// NOTE: Before calling __xray_patch() again, consider re-initializing the
+/// implementation first. Some implementations might stay in an "off" state when
+/// they are finalized, while some might be in an invalid/unknown state.
+///
+#ifndef XRAY_XRAY_LOG_INTERFACE_H
+#define XRAY_XRAY_LOG_INTERFACE_H
+
+#include "xray/xray_interface.h"
+#include <stddef.h>
+
+extern "C" {
+
+/// This enum defines the valid states in which the logging implementation can
+/// be at.
+enum XRayLogInitStatus {
+  /// The default state is uninitialized, and in case there were errors in the
+  /// initialization, the implementation MUST return XRAY_LOG_UNINITIALIZED.
+  XRAY_LOG_UNINITIALIZED = 0,
+
+  /// Some implementations support multi-stage init (or asynchronous init), and
+  /// may return XRAY_LOG_INITIALIZING to signal callers of the API that
+  /// there's an ongoing initialization routine running. This allows
+  /// implementations to support concurrent threads attempting to initialize,
+  /// while only signalling success in one.
+  XRAY_LOG_INITIALIZING = 1,
+
+  /// When an implementation is done initializing, it MUST return
+  /// XRAY_LOG_INITIALIZED. When users call `__xray_patch()`, they are
+  /// guaranteed that the implementation installed with
+  /// `__xray_set_log_impl(...)` has been initialized.
+  XRAY_LOG_INITIALIZED = 2,
+
+  /// Some implementations might support multi-stage finalization (or
+  /// asynchronous finalization), and may return XRAY_LOG_FINALIZING to signal
+  /// callers of the API that there's an ongoing finalization routine running.
+  /// This allows implementations to support concurrent threads attempting to
+  /// finalize, while only signalling success/completion in one.
+  XRAY_LOG_FINALIZING = 3,
+
+  /// When an implementation is done finalizing, it MUST return
+  /// XRAY_LOG_FINALIZED. It is up to the implementation to determine what the
+  /// semantics of a finalized implementation is. Some implementations might
+  /// allow re-initialization once the log is finalized, while some might always
+  /// be on (and that finalization is a no-op).
+  XRAY_LOG_FINALIZED = 4,
+};
+
+/// This enum allows an implementation to signal log flushing operations via
+/// `__xray_log_flushLog()`, and the state of flushing the log.
+enum XRayLogFlushStatus {
+  XRAY_LOG_NOT_FLUSHING = 0,
+  XRAY_LOG_FLUSHING = 1,
+  XRAY_LOG_FLUSHED = 2,
+};
+
+/// A valid XRay logging implementation MUST provide all of the function
+/// pointers in XRayLogImpl when being installed through `__xray_set_log_impl`.
+/// To be precise, ALL the functions pointers MUST NOT be nullptr.
+struct XRayLogImpl {
+  /// The log initialization routine provided by the implementation, always
+  /// provided with the following parameters:
+  ///
+  ///   - buffer size
+  ///   - maximum number of buffers
+  ///   - a pointer to an argument struct that the implementation MUST handle
+  ///   - the size of the argument struct
+  ///
+  /// See XRayLogInitStatus for details on what the implementation MUST return
+  /// when called.
+  ///
+  /// If the implementation needs to install handlers aside from the 0-argument
+  /// function call handler, it MUST do so in this initialization handler.
+  ///
+  /// See xray_interface.h for available handler installation routines.
+  XRayLogInitStatus (*log_init)(size_t, size_t, void *, size_t);
+
+  /// The log finalization routine provided by the implementation.
+  ///
+  /// See XRayLogInitStatus for details on what the implementation MUST return
+  /// when called.
+  XRayLogInitStatus (*log_finalize)();
+
+  /// The 0-argument function call handler. XRay logging implementations MUST
+  /// always have a handler for function entry and exit events. In case the
+  /// implementation wants to support arg1 (or other future extensions to XRay
+  /// logging) those MUST be installed by the installed 'log_init' handler.
+  void (*handle_arg0)(int32_t, XRayEntryType);
+
+  /// The log implementation provided routine for when __xray_log_flushLog() is
+  /// called.
+  ///
+  /// See XRayLogFlushStatus for details on what the implementation MUST return
+  /// when called.
+  XRayLogFlushStatus (*flush_log)();
+};
+
+/// This function installs a new logging implementation that XRay will use. In
+/// case there are any nullptr members in Impl, XRay will *uninstall any
+/// existing implementations*. It does NOT patch the instrumentation sleds.
+///
+/// NOTE: This function does NOT attempt to finalize the currently installed
+/// implementation. Use with caution.
+///
+/// It is guaranteed safe to call this function in the following states:
+///
+///   - When the implementation is UNINITIALIZED.
+///   - When the implementation is FINALIZED.
+///   - When there is no current implementation installed.
+///
+/// It is logging implementation defined what happens when this function is
+/// called while in any other states.
+void __xray_set_log_impl(XRayLogImpl Impl);
+
+/// This function removes the currently installed implementation. It will also
+/// uninstall any handlers that have been previously installed. It does NOT
+/// unpatch the instrumentation sleds.
+///
+/// NOTE: This function does NOT attempt to finalize the currently installed
+/// implementation. Use with caution.
+///
+/// It is guaranteed safe to call this function in the following states:
+///
+///   - When the implementation is UNINITIALIZED.
+///   - When the implementation is FINALIZED.
+///   - When there is no current implementation installed.
+///
+/// It is logging implementation defined what happens when this function is
+/// called while in any other states.
+void __xray_remove_log_impl();
+
+/// Invokes the installed implementation initialization routine. See
+/// XRayLogInitStatus for what the return values mean.
+XRayLogInitStatus __xray_log_init(size_t BufferSize, size_t MaxBuffers,
+                                  void *Args, size_t ArgsSize);
+
+/// Invokes the installed implementation finalization routine. See
+/// XRayLogInitStatus for what the return values mean.
+XRayLogInitStatus __xray_log_finalize();
+
+/// Invokes the install implementation log flushing routine. See
+/// XRayLogFlushStatus for what the return values mean.
+XRayLogFlushStatus __xray_log_flushLog();
+
+} // extern "C"
+
+namespace __xray {
+
+// Options used by the LLVM XRay FDR implementation.
+struct FDRLoggingOptions {
+  bool ReportErrors = false;
+  int Fd = -1;
+};
+
+} // namespace __xray
+
+#endif // XRAY_XRAY_LOG_INTERFACE_H
diff --git a/include/xray/xray_records.h b/include/xray/xray_records.h
index 34c236b..feb8d22 100644
--- a/include/xray/xray_records.h
+++ b/include/xray/xray_records.h
@@ -21,8 +21,17 @@
 
 enum FileTypes {
   NAIVE_LOG = 0,
+  FDR_LOG = 1,
 };
 
+// FDR mode use of the union field in the XRayFileHeader.
+struct alignas(16) FdrAdditionalHeaderData {
+  uint64_t ThreadBufferSize;
+};
+
+static_assert(sizeof(FdrAdditionalHeaderData) == 16,
+              "FdrAdditionalHeaderData != 16 bytes");
+
 // This data structure is used to describe the contents of the file. We use this
 // for versioning the supported XRay file formats.
 struct alignas(32) XRayFileHeader {
@@ -40,6 +49,16 @@
 
   // The frequency by which TSC increases per-second.
   alignas(8) uint64_t CycleFrequency = 0;
+
+  union {
+    char FreeForm[16];
+    // The current civiltime timestamp, as retrived from 'clock_gettime'. This
+    // allows readers of the file to determine when the file was created or
+    // written down.
+    struct timespec TS;
+
+    struct FdrAdditionalHeaderData FdrData;
+  };
 } __attribute__((packed));
 
 static_assert(sizeof(XRayFileHeader) == 32, "XRayFileHeader != 32 bytes");
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 4ab1e93..90f72d0 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -21,18 +21,9 @@
   string(TOUPPER ${runtime} runtime_uppercase)
   if(COMPILER_RT_HAS_${runtime_uppercase})
     add_subdirectory(${runtime})
-    foreach(directory ${ARGN})
-      add_subdirectory(${directory})
-    endforeach()
-  endif()
-endfunction()
-
-function(compiler_rt_build_sanitizer sanitizer)
-  string(TOUPPER ${sanitizer} sanitizer_uppercase)
-  string(TOLOWER ${sanitizer} sanitizer_lowercase)
-  list(FIND COMPILER_RT_SANITIZERS_TO_BUILD ${sanitizer_lowercase} result)
-  if(NOT ${result} EQUAL -1)
-    compiler_rt_build_runtime(${sanitizer} ${ARGN})
+    if(${runtime} STREQUAL tsan)
+      add_subdirectory(tsan/dd)
+    endif()
   endif()
 endfunction()
 
@@ -45,14 +36,9 @@
     add_subdirectory(ubsan)
   endif()
 
-  compiler_rt_build_sanitizer(asan)
-  compiler_rt_build_sanitizer(dfsan)
-  compiler_rt_build_sanitizer(msan)
-  compiler_rt_build_sanitizer(tsan tsan/dd)
-  compiler_rt_build_sanitizer(safestack)
-  compiler_rt_build_sanitizer(cfi)
-  compiler_rt_build_sanitizer(esan)
-  compiler_rt_build_sanitizer(scudo)
+  foreach(sanitizer ${COMPILER_RT_SANITIZERS_TO_BUILD})
+    compiler_rt_build_runtime(${sanitizer})
+  endforeach()
 
   compiler_rt_build_runtime(profile)
 endif()
diff --git a/lib/asan/CMakeLists.txt b/lib/asan/CMakeLists.txt
index 5ac5708..a2d4630 100644
--- a/lib/asan/CMakeLists.txt
+++ b/lib/asan/CMakeLists.txt
@@ -36,6 +36,7 @@
 include_directories(..)
 
 set(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
+
 append_rtti_flag(OFF ASAN_CFLAGS)
 
 set(ASAN_DYNAMIC_LINK_FLAGS)
@@ -107,6 +108,7 @@
 
 if(APPLE)
   add_weak_symbols("asan" WEAK_SYMBOL_LINK_FLAGS)
+  add_weak_symbols("lsan" WEAK_SYMBOL_LINK_FLAGS)
   add_weak_symbols("ubsan" WEAK_SYMBOL_LINK_FLAGS)
   add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)
 
@@ -176,6 +178,21 @@
       set(VERSION_SCRIPT_FLAG)
     endif()
 
+    set(ASAN_DYNAMIC_WEAK_INTERCEPTION)
+    if (MSVC)
+      add_compiler_rt_object_libraries(AsanWeakInterception
+        ${SANITIZER_COMMON_SUPPORTED_OS}
+        ARCHS ${arch}
+        SOURCES asan_win_weak_interception.cc
+        CFLAGS ${ASAN_CFLAGS} -DSANITIZER_DYNAMIC
+        DEFS ${ASAN_COMMON_DEFINITIONS})
+      set(ASAN_DYNAMIC_WEAK_INTERCEPTION
+          AsanWeakInterception
+          UbsanWeakInterception
+          SancovWeakInterception
+          SanitizerCommonWeakInterception)
+    endif()
+
     add_compiler_rt_runtime(clang_rt.asan
       SHARED
       ARCHS ${arch}
@@ -187,6 +204,7 @@
               # add_dependencies(clang_rt.asan-dynamic-${arch} clang_rt.asan-dynamic-${arch}-version-list)
               RTAsan_dynamic_version_script_dummy
               RTUbsan_cxx
+              ${ASAN_DYNAMIC_WEAK_INTERCEPTION}
       CFLAGS ${ASAN_DYNAMIC_CFLAGS}
       LINK_FLAGS ${ASAN_DYNAMIC_LINK_FLAGS}
                 ${VERSION_SCRIPT_FLAG}
@@ -205,28 +223,46 @@
     endif()
 
     if (WIN32)
+      add_compiler_rt_object_libraries(AsanDllThunk
+        ${SANITIZER_COMMON_SUPPORTED_OS}
+        ARCHS ${arch}
+        SOURCES asan_globals_win.cc
+                asan_win_dll_thunk.cc
+        CFLAGS ${ASAN_CFLAGS} -DSANITIZER_DLL_THUNK
+        DEFS ${ASAN_COMMON_DEFINITIONS})
+
       add_compiler_rt_runtime(clang_rt.asan_dll_thunk
         STATIC
         ARCHS ${arch}
-        SOURCES asan_win_dll_thunk.cc
-                asan_globals_win.cc
-                $<TARGET_OBJECTS:RTInterception.${arch}>
-        CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK
-        DEFS ${ASAN_COMMON_DEFINITIONS}
+        OBJECT_LIBS AsanDllThunk
+                    UbsanDllThunk
+                    SancovDllThunk
+                    SanitizerCommonDllThunk
+        SOURCES $<TARGET_OBJECTS:RTInterception.${arch}>
         PARENT_TARGET asan)
 
-      set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DASAN_DYNAMIC_RUNTIME_THUNK")
+      set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK")
       if(MSVC)
         list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl")
       elseif(CMAKE_C_COMPILER_ID MATCHES Clang)
         list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs")
       endif()
 
+      add_compiler_rt_object_libraries(AsanDynamicRuntimeThunk
+        ${SANITIZER_COMMON_SUPPORTED_OS}
+        ARCHS ${arch}
+        SOURCES asan_globals_win.cc
+                asan_win_dynamic_runtime_thunk.cc
+        CFLAGS ${ASAN_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
+        DEFS ${ASAN_COMMON_DEFINITIONS})
+
       add_compiler_rt_runtime(clang_rt.asan_dynamic_runtime_thunk
         STATIC
         ARCHS ${arch}
-        SOURCES asan_win_dynamic_runtime_thunk.cc
-                asan_globals_win.cc
+        OBJECT_LIBS AsanDynamicRuntimeThunk
+                    UbsanDynamicRuntimeThunk
+                    SancovDynamicRuntimeThunk
+                    SanitizerCommonDynamicRuntimeThunk
         CFLAGS ${ASAN_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
         DEFS ${ASAN_COMMON_DEFINITIONS}
         PARENT_TARGET asan)
diff --git a/lib/asan/asan.syms.extra b/lib/asan/asan.syms.extra
index 007aafe..f8e9b3a 100644
--- a/lib/asan/asan.syms.extra
+++ b/lib/asan/asan.syms.extra
@@ -1,3 +1,4 @@
 __asan_*
 __lsan_*
 __ubsan_*
+__sancov_*
diff --git a/lib/asan/asan_activation.cc b/lib/asan/asan_activation.cc
index 7e4e604..66eba9c 100644
--- a/lib/asan/asan_activation.cc
+++ b/lib/asan/asan_activation.cc
@@ -106,7 +106,6 @@
   // Deactivate the runtime.
   SetCanPoisonMemory(false);
   SetMallocContextSize(1);
-  ReInitializeCoverage(false, nullptr);
 
   AllocatorOptions disabled = asan_deactivated_flags.allocator_options;
   disabled.quarantine_size_mb = 0;
@@ -130,8 +129,6 @@
 
   SetCanPoisonMemory(asan_deactivated_flags.poison_heap);
   SetMallocContextSize(asan_deactivated_flags.malloc_context_size);
-  ReInitializeCoverage(asan_deactivated_flags.coverage,
-                       asan_deactivated_flags.coverage_dir);
   ReInitializeAllocator(asan_deactivated_flags.allocator_options);
 
   asan_is_deactivated = false;
diff --git a/lib/asan/asan_allocator.cc b/lib/asan/asan_allocator.cc
index 1478949..92963dd 100644
--- a/lib/asan/asan_allocator.cc
+++ b/lib/asan/asan_allocator.cc
@@ -21,7 +21,9 @@
 #include "asan_report.h"
 #include "asan_stack.h"
 #include "asan_thread.h"
+#include "sanitizer_common/sanitizer_allocator_checks.h"
 #include "sanitizer_common/sanitizer_allocator_interface.h"
+#include "sanitizer_common/sanitizer_errno.h"
 #include "sanitizer_common/sanitizer_flags.h"
 #include "sanitizer_common/sanitizer_internal_defs.h"
 #include "sanitizer_common/sanitizer_list.h"
@@ -160,7 +162,11 @@
   }
 
   void *Allocate(uptr size) {
-    return get_allocator().Allocate(cache_, size, 1, false);
+    void *res = get_allocator().Allocate(cache_, size, 1);
+    // TODO(alekseys): Consider making quarantine OOM-friendly.
+    if (UNLIKELY(!res))
+      return DieOnFailure::OnOOM();
+    return res;
   }
 
   void Deallocate(void *p) {
@@ -235,6 +241,8 @@
   AllocatorCache fallback_allocator_cache;
   QuarantineCache fallback_quarantine_cache;
 
+  atomic_uint8_t rss_limit_exceeded;
+
   // ------------------- Options --------------------------
   atomic_uint16_t min_redzone;
   atomic_uint16_t max_redzone;
@@ -264,10 +272,19 @@
   }
 
   void Initialize(const AllocatorOptions &options) {
-    allocator.Init(options.may_return_null, options.release_to_os_interval_ms);
+    SetAllocatorMayReturnNull(options.may_return_null);
+    allocator.Init(options.release_to_os_interval_ms);
     SharedInitCode(options);
   }
 
+  bool RssLimitExceeded() {
+    return atomic_load(&rss_limit_exceeded, memory_order_relaxed);
+  }
+
+  void SetRssLimitExceeded(bool limit_exceeded) {
+    atomic_store(&rss_limit_exceeded, limit_exceeded, memory_order_relaxed);
+  }
+
   void RePoisonChunk(uptr chunk) {
     // This could be a user-facing chunk (with redzones), or some internal
     // housekeeping chunk, like TransferBatch. Start by assuming the former.
@@ -292,7 +309,7 @@
   }
 
   void ReInitialize(const AllocatorOptions &options) {
-    allocator.SetMayReturnNull(options.may_return_null);
+    SetAllocatorMayReturnNull(options.may_return_null);
     allocator.SetReleaseToOSIntervalMs(options.release_to_os_interval_ms);
     SharedInitCode(options);
 
@@ -313,7 +330,7 @@
     options->thread_local_quarantine_size_kb = quarantine.GetCacheSize() >> 10;
     options->min_redzone = atomic_load(&min_redzone, memory_order_acquire);
     options->max_redzone = atomic_load(&max_redzone, memory_order_acquire);
-    options->may_return_null = allocator.MayReturnNull();
+    options->may_return_null = AllocatorMayReturnNull();
     options->alloc_dealloc_mismatch =
         atomic_load(&alloc_dealloc_mismatch, memory_order_acquire);
     options->release_to_os_interval_ms = allocator.ReleaseToOSIntervalMs();
@@ -363,6 +380,8 @@
                  AllocType alloc_type, bool can_fill) {
     if (UNLIKELY(!asan_inited))
       AsanInitFromRtl();
+    if (RssLimitExceeded())
+      return AsanAllocator::FailureHandler::OnOOM();
     Flags &fl = *flags();
     CHECK(stack);
     const uptr min_alignment = SHADOW_GRANULARITY;
@@ -395,24 +414,21 @@
     if (size > kMaxAllowedMallocSize || needed_size > kMaxAllowedMallocSize) {
       Report("WARNING: AddressSanitizer failed to allocate 0x%zx bytes\n",
              (void*)size);
-      return allocator.ReturnNullOrDieOnBadRequest();
+      return AsanAllocator::FailureHandler::OnBadRequest();
     }
 
     AsanThread *t = GetCurrentThread();
     void *allocated;
-    bool check_rss_limit = true;
     if (t) {
       AllocatorCache *cache = GetAllocatorCache(&t->malloc_storage());
-      allocated =
-          allocator.Allocate(cache, needed_size, 8, false, check_rss_limit);
+      allocated = allocator.Allocate(cache, needed_size, 8);
     } else {
       SpinMutexLock l(&fallback_mutex);
       AllocatorCache *cache = &fallback_allocator_cache;
-      allocated =
-          allocator.Allocate(cache, needed_size, 8, false, check_rss_limit);
+      allocated = allocator.Allocate(cache, needed_size, 8);
     }
-
-    if (!allocated) return allocator.ReturnNullOrDieOnOOM();
+    if (!allocated)
+      return nullptr;
 
     if (*(u8 *)MEM_TO_SHADOW((uptr)allocated) == 0 && CanPoisonMemory()) {
       // Heap poisoning is enabled, but the allocator provides an unpoisoned
@@ -514,8 +530,7 @@
 
   // Expects the chunk to already be marked as quarantined by using
   // AtomicallySetQuarantineFlagIfAllocated.
-  void QuarantineChunk(AsanChunk *m, void *ptr, BufferedStackTrace *stack,
-                       AllocType alloc_type) {
+  void QuarantineChunk(AsanChunk *m, void *ptr, BufferedStackTrace *stack) {
     CHECK_EQ(m->chunk_state, CHUNK_QUARANTINE);
     CHECK_GE(m->alloc_tid, 0);
     if (SANITIZER_WORDSIZE == 64)  // On 32-bits this resides in user area.
@@ -566,7 +581,17 @@
     uptr chunk_beg = p - kChunkHeaderSize;
     AsanChunk *m = reinterpret_cast<AsanChunk *>(chunk_beg);
 
+    // On Windows, uninstrumented DLLs may allocate memory before ASan hooks
+    // malloc. Don't report an invalid free in this case.
+    if (SANITIZER_WINDOWS &&
+        !get_allocator().PointerIsMine(ptr)) {
+      if (!IsSystemHeapAddress(p))
+        ReportFreeNotMalloced(p, stack);
+      return;
+    }
+
     ASAN_FREE_HOOK(ptr);
+
     // Must mark the chunk as quarantined before any changes to its metadata.
     // Do not quarantine given chunk if we failed to set CHUNK_QUARANTINE flag.
     if (!AtomicallySetQuarantineFlagIfAllocated(m, ptr, stack)) return;
@@ -583,7 +608,7 @@
       ReportNewDeleteSizeMismatch(p, delete_size, stack);
     }
 
-    QuarantineChunk(m, ptr, stack, alloc_type);
+    QuarantineChunk(m, ptr, stack);
   }
 
   void *Reallocate(void *old_ptr, uptr new_size, BufferedStackTrace *stack) {
@@ -612,8 +637,8 @@
   }
 
   void *Calloc(uptr nmemb, uptr size, BufferedStackTrace *stack) {
-    if (CallocShouldReturnNullDueToOverflow(size, nmemb))
-      return allocator.ReturnNullOrDieOnBadRequest();
+    if (CheckForCallocOverflow(size, nmemb))
+      return AsanAllocator::FailureHandler::OnBadRequest();
     void *ptr = Allocate(nmemb * size, 8, stack, FROM_MALLOC, false);
     // If the memory comes from the secondary allocator no need to clear it
     // as it comes directly from mmap.
@@ -776,11 +801,6 @@
   instance.PrintStats();
 }
 
-void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack,
-                    AllocType alloc_type) {
-  return instance.Allocate(size, alignment, stack, alloc_type, true);
-}
-
 void asan_free(void *ptr, BufferedStackTrace *stack, AllocType alloc_type) {
   instance.Deallocate(ptr, 0, stack, alloc_type);
 }
@@ -791,40 +811,59 @@
 }
 
 void *asan_malloc(uptr size, BufferedStackTrace *stack) {
-  return instance.Allocate(size, 8, stack, FROM_MALLOC, true);
+  return SetErrnoOnNull(instance.Allocate(size, 8, stack, FROM_MALLOC, true));
 }
 
 void *asan_calloc(uptr nmemb, uptr size, BufferedStackTrace *stack) {
-  return instance.Calloc(nmemb, size, stack);
+  return SetErrnoOnNull(instance.Calloc(nmemb, size, stack));
 }
 
 void *asan_realloc(void *p, uptr size, BufferedStackTrace *stack) {
   if (!p)
-    return instance.Allocate(size, 8, stack, FROM_MALLOC, true);
+    return SetErrnoOnNull(instance.Allocate(size, 8, stack, FROM_MALLOC, true));
   if (size == 0) {
-    instance.Deallocate(p, 0, stack, FROM_MALLOC);
-    return nullptr;
+    if (flags()->allocator_frees_and_returns_null_on_realloc_zero) {
+      instance.Deallocate(p, 0, stack, FROM_MALLOC);
+      return nullptr;
+    }
+    // Allocate a size of 1 if we shouldn't free() on Realloc to 0
+    size = 1;
   }
-  return instance.Reallocate(p, size, stack);
+  return SetErrnoOnNull(instance.Reallocate(p, size, stack));
 }
 
 void *asan_valloc(uptr size, BufferedStackTrace *stack) {
-  return instance.Allocate(size, GetPageSizeCached(), stack, FROM_MALLOC, true);
+  return SetErrnoOnNull(
+      instance.Allocate(size, GetPageSizeCached(), stack, FROM_MALLOC, true));
 }
 
 void *asan_pvalloc(uptr size, BufferedStackTrace *stack) {
   uptr PageSize = GetPageSizeCached();
-  size = RoundUpTo(size, PageSize);
-  if (size == 0) {
-    // pvalloc(0) should allocate one page.
-    size = PageSize;
+  // pvalloc(0) should allocate one page.
+  size = size ? RoundUpTo(size, PageSize) : PageSize;
+  return SetErrnoOnNull(
+      instance.Allocate(size, PageSize, stack, FROM_MALLOC, true));
+}
+
+void *asan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack,
+                    AllocType alloc_type) {
+  if (UNLIKELY(!IsPowerOfTwo(alignment))) {
+    errno = errno_EINVAL;
+    return AsanAllocator::FailureHandler::OnBadRequest();
   }
-  return instance.Allocate(size, PageSize, stack, FROM_MALLOC, true);
+  return SetErrnoOnNull(
+      instance.Allocate(size, alignment, stack, alloc_type, true));
 }
 
 int asan_posix_memalign(void **memptr, uptr alignment, uptr size,
                         BufferedStackTrace *stack) {
+  if (UNLIKELY(!CheckPosixMemalignAlignment(alignment))) {
+    AsanAllocator::FailureHandler::OnBadRequest();
+    return errno_EINVAL;
+  }
   void *ptr = instance.Allocate(size, alignment, stack, FROM_MALLOC, true);
+  if (UNLIKELY(!ptr))
+    return errno_ENOMEM;
   CHECK(IsAligned((uptr)ptr, alignment));
   *memptr = ptr;
   return 0;
@@ -852,8 +891,8 @@
   instance.ForceUnlock();
 }
 
-void AsanSoftRssLimitExceededCallback(bool exceeded) {
-  instance.allocator.SetRssLimitIsExceeded(exceeded);
+void AsanSoftRssLimitExceededCallback(bool limit_exceeded) {
+  instance.SetRssLimitExceeded(limit_exceeded);
 }
 
 } // namespace __asan
@@ -970,15 +1009,13 @@
 
 #if !SANITIZER_SUPPORTS_WEAK_HOOKS
 // Provide default (no-op) implementation of malloc hooks.
-extern "C" {
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_malloc_hook(void *ptr, uptr size) {
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_malloc_hook,
+                             void *ptr, uptr size) {
   (void)ptr;
   (void)size;
 }
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_free_hook(void *ptr) {
+
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_free_hook, void *ptr) {
   (void)ptr;
 }
-} // extern "C"
 #endif
diff --git a/lib/asan/asan_allocator.h b/lib/asan/asan_allocator.h
index ee28ecf..ad1aeb5 100644
--- a/lib/asan/asan_allocator.h
+++ b/lib/asan/asan_allocator.h
@@ -161,10 +161,17 @@
 typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap;
 # endif
 typedef CompactSizeClassMap SizeClassMap;
-typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE, 16,
-  SizeClassMap, kRegionSizeLog,
-  ByteMap,
-  AsanMapUnmapCallback> PrimaryAllocator;
+struct AP32 {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+  static const uptr kMetadataSize = 16;
+  typedef __asan::SizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = __asan::kRegionSizeLog;
+  typedef __asan::ByteMap ByteMap;
+  typedef AsanMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+typedef SizeClassAllocator32<AP32> PrimaryAllocator;
 #endif  // SANITIZER_CAN_USE_ALLOCATOR64
 
 static const uptr kNumberOfSizeClasses = SizeClassMap::kNumClasses;
diff --git a/lib/asan/asan_errors.cc b/lib/asan/asan_errors.cc
index c287ba1..b7a38eb 100644
--- a/lib/asan/asan_errors.cc
+++ b/lib/asan/asan_errors.cc
@@ -58,10 +58,21 @@
   SignalContext::DumpAllRegisters(context);
 }
 
+static void MaybeReportNonExecRegion(uptr pc) {
+#if SANITIZER_FREEBSD || SANITIZER_LINUX
+  MemoryMappingLayout proc_maps(/*cache_enabled*/ true);
+  MemoryMappedSegment segment;
+  while (proc_maps.Next(&segment)) {
+    if (pc >= segment.start && pc < segment.end && !segment.IsExecutable())
+      Report("Hint: PC is at a non-executable region. Maybe a wild jump?\n");
+  }
+#endif
+}
+
 void ErrorDeadlySignal::Print() {
   Decorator d;
   Printf("%s", d.Warning());
-  const char *description = DescribeSignalOrException(signo);
+  const char *description = __sanitizer::DescribeSignalOrException(signo);
   Report(
       "ERROR: AddressSanitizer: %s on unknown address %p (pc %p bp %p sp %p "
       "T%d)\n",
@@ -77,6 +88,7 @@
     if (addr < GetPageSizeCached())
       Report("Hint: address points to the zero page.\n");
   }
+  MaybeReportNonExecRegion(pc);
   scariness.Print();
   BufferedStackTrace stack;
   GetStackTraceWithPcBpAndContext(&stack, kStackTraceMax, pc, bp, context,
diff --git a/lib/asan/asan_flags.cc b/lib/asan/asan_flags.cc
index 81dcc0d..6be0d6e 100644
--- a/lib/asan/asan_flags.cc
+++ b/lib/asan/asan_flags.cc
@@ -61,7 +61,7 @@
   {
     CommonFlags cf;
     cf.CopyFrom(*common_flags());
-    cf.detect_leaks = CAN_SANITIZE_LEAKS;
+    cf.detect_leaks = cf.detect_leaks && CAN_SANITIZE_LEAKS;
     cf.external_symbolizer_path = GetEnv("ASAN_SYMBOLIZER_PATH");
     cf.malloc_context_size = kDefaultMallocContextSize;
     cf.intercept_tls_get_addr = true;
@@ -194,13 +194,14 @@
     Report("WARNING: strchr* interceptors are enabled even though "
            "replace_str=0. Use intercept_strchr=0 to disable them.");
   }
+  if (!f->replace_str && common_flags()->intercept_strndup) {
+    Report("WARNING: strndup* interceptors are enabled even though "
+           "replace_str=0. Use intercept_strndup=0 to disable them.");
+  }
 }
 
 }  // namespace __asan
 
-#if !SANITIZER_SUPPORTS_WEAK_HOOKS
-extern "C" {
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-const char* __asan_default_options() { return ""; }
-}  // extern "C"
-#endif
+SANITIZER_INTERFACE_WEAK_DEF(const char*, __asan_default_options, void) {
+  return "";
+}
diff --git a/lib/asan/asan_flags.inc b/lib/asan/asan_flags.inc
index 98cbca2..f2216c2 100644
--- a/lib/asan/asan_flags.inc
+++ b/lib/asan/asan_flags.inc
@@ -154,3 +154,10 @@
           "(WARNING: USE AT YOUR OWN RISK!)")
 ASAN_FLAG(bool, use_odr_indicator, false,
           "Use special ODR indicator symbol for ODR violation detection")
+ASAN_FLAG(bool, allocator_frees_and_returns_null_on_realloc_zero, true,
+          "realloc(p, 0) is equivalent to free(p) by default (Same as the "
+          "POSIX standard). If set to false, realloc(p, 0) will return a "
+          "pointer to an allocated space which can not be used.")
+ASAN_FLAG(bool, verify_asan_link_order, true,
+          "Check position of ASan runtime in library list (needs to be disabled"
+          " when other library has to be preloaded system-wide)")
diff --git a/lib/asan/asan_globals.cc b/lib/asan/asan_globals.cc
index b723306..eebada8 100644
--- a/lib/asan/asan_globals.cc
+++ b/lib/asan/asan_globals.cc
@@ -332,6 +332,26 @@
   *flag = 0;
 }
 
+void __asan_register_elf_globals(uptr *flag, void *start, void *stop) {
+  if (*flag) return;
+  if (!start) return;
+  CHECK_EQ(0, ((uptr)stop - (uptr)start) % sizeof(__asan_global));
+  __asan_global *globals_start = (__asan_global*)start;
+  __asan_global *globals_stop = (__asan_global*)stop;
+  __asan_register_globals(globals_start, globals_stop - globals_start);
+  *flag = 1;
+}
+
+void __asan_unregister_elf_globals(uptr *flag, void *start, void *stop) {
+  if (!*flag) return;
+  if (!start) return;
+  CHECK_EQ(0, ((uptr)stop - (uptr)start) % sizeof(__asan_global));
+  __asan_global *globals_start = (__asan_global*)start;
+  __asan_global *globals_stop = (__asan_global*)stop;
+  __asan_unregister_globals(globals_start, globals_stop - globals_start);
+  *flag = 0;
+}
+
 // Register an array of globals.
 void __asan_register_globals(__asan_global *globals, uptr n) {
   if (!flags()->report_globals) return;
diff --git a/lib/asan/asan_globals_win.cc b/lib/asan/asan_globals_win.cc
index 56c0d1a..261762b 100644
--- a/lib/asan/asan_globals_win.cc
+++ b/lib/asan/asan_globals_win.cc
@@ -29,7 +29,7 @@
   __asan_global *end = &__asan_globals_end;
   uptr bytediff = (uptr)end - (uptr)start;
   if (bytediff % sizeof(__asan_global) != 0) {
-#ifdef ASAN_DLL_THUNK
+#ifdef SANITIZER_DLL_THUNK
     __debugbreak();
 #else
     CHECK("corrupt asan global array");
diff --git a/lib/asan/asan_globals_win.h b/lib/asan/asan_globals_win.h
deleted file mode 100644
index d4ed9c1..0000000
--- a/lib/asan/asan_globals_win.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- asan_globals_win.h --------------------------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Interface to the Windows-specific global management code. Separated into a
-// standalone header to allow inclusion from asan_win_dynamic_runtime_thunk,
-// which defines symbols that clash with other sanitizer headers.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef ASAN_GLOBALS_WIN_H
-#define ASAN_GLOBALS_WIN_H
-
-#if !defined(_MSC_VER)
-#error "this file is Windows-only, and uses MSVC pragmas"
-#endif
-
-#if defined(_WIN64)
-#define SANITIZER_SYM_PREFIX
-#else
-#define SANITIZER_SYM_PREFIX "_"
-#endif
-
-// Use this macro to force linking asan_globals_win.cc into the DSO.
-#define ASAN_LINK_GLOBALS_WIN() \
-  __pragma(                     \
-      comment(linker, "/include:" SANITIZER_SYM_PREFIX "__asan_dso_reg_hook"))
-
-#endif // ASAN_GLOBALS_WIN_H
diff --git a/lib/asan/asan_interceptors.cc b/lib/asan/asan_interceptors.cc
index 606016d..34ca22b 100644
--- a/lib/asan/asan_interceptors.cc
+++ b/lib/asan/asan_interceptors.cc
@@ -37,12 +37,19 @@
 namespace __asan {
 
 // Return true if we can quickly decide that the region is unpoisoned.
+// We assume that a redzone is at least 16 bytes.
 static inline bool QuickCheckForUnpoisonedRegion(uptr beg, uptr size) {
   if (size == 0) return true;
   if (size <= 32)
     return !AddressIsPoisoned(beg) &&
            !AddressIsPoisoned(beg + size - 1) &&
            !AddressIsPoisoned(beg + size / 2);
+  if (size <= 64)
+    return !AddressIsPoisoned(beg) &&
+           !AddressIsPoisoned(beg + size / 4) &&
+           !AddressIsPoisoned(beg + size - 1) &&
+           !AddressIsPoisoned(beg + 3 * size / 4) &&
+           !AddressIsPoisoned(beg + size / 2);
   return false;
 }
 
@@ -171,6 +178,10 @@
 }
 
 int OnExit() {
+  if (CAN_SANITIZE_LEAKS && common_flags()->detect_leaks &&
+      __lsan::HasReportedLeaks()) {
+    return common_flags()->exitcode;
+  }
   // FIXME: ask frontend whether we need to return failure.
   return 0;
 }
@@ -228,13 +239,14 @@
 // Strict init-order checking is dlopen-hostile:
 // https://github.com/google/sanitizers/issues/178
 #define COMMON_INTERCEPTOR_ON_DLOPEN(filename, flag)                           \
-  if (flags()->strict_init_order) {                                            \
-    StopInitOrderChecking();                                                   \
-  }
+  do {                                                                         \
+    if (flags()->strict_init_order)                                            \
+      StopInitOrderChecking();                                                 \
+    CheckNoDeepBind(filename, flag);                                           \
+  } while (false)
 #define COMMON_INTERCEPTOR_ON_EXIT(ctx) OnExit()
-#define COMMON_INTERCEPTOR_LIBRARY_LOADED(filename, handle) \
-  CoverageUpdateMapping()
-#define COMMON_INTERCEPTOR_LIBRARY_UNLOADED() CoverageUpdateMapping()
+#define COMMON_INTERCEPTOR_LIBRARY_LOADED(filename, handle)
+#define COMMON_INTERCEPTOR_LIBRARY_UNLOADED()
 #define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (!asan_inited)
 #define COMMON_INTERCEPTOR_GET_TLS_RANGE(begin, end)                           \
   if (AsanThread *t = GetCurrentThread()) {                                    \
@@ -348,28 +360,22 @@
 
 #if SANITIZER_ANDROID
 INTERCEPTOR(void*, bsd_signal, int signum, void *handler) {
-  if (!IsHandledDeadlySignal(signum) ||
-      common_flags()->allow_user_segv_handler) {
+  if (GetHandleSignalMode(signum) != kHandleSignalExclusive)
     return REAL(bsd_signal)(signum, handler);
-  }
   return 0;
 }
 #endif
 
 INTERCEPTOR(void*, signal, int signum, void *handler) {
-  if (!IsHandledDeadlySignal(signum) ||
-      common_flags()->allow_user_segv_handler) {
+  if (GetHandleSignalMode(signum) != kHandleSignalExclusive)
     return REAL(signal)(signum, handler);
-  }
   return nullptr;
 }
 
 INTERCEPTOR(int, sigaction, int signum, const struct sigaction *act,
                             struct sigaction *oldact) {
-  if (!IsHandledDeadlySignal(signum) ||
-      common_flags()->allow_user_segv_handler) {
+  if (GetHandleSignalMode(signum) != kHandleSignalExclusive)
     return REAL(sigaction)(signum, act, oldact);
-  }
   return 0;
 }
 
@@ -434,6 +440,13 @@
 }
 #endif
 
+#if ASAN_INTERCEPT___LONGJMP_CHK
+INTERCEPTOR(void, __longjmp_chk, void *env, int val) {
+  __asan_handle_no_return();
+  REAL(__longjmp_chk)(env, val);
+}
+#endif
+
 #if ASAN_INTERCEPT_SIGLONGJMP
 INTERCEPTOR(void, siglongjmp, void *env, int val) {
   __asan_handle_no_return();
@@ -570,17 +583,6 @@
 }
 #endif // ASAN_INTERCEPT___STRDUP
 
-INTERCEPTOR(SIZE_T, wcslen, const wchar_t *s) {
-  void *ctx;
-  ASAN_INTERCEPTOR_ENTER(ctx, wcslen);
-  SIZE_T length = internal_wcslen(s);
-  if (!asan_init_is_running) {
-    ENSURE_ASAN_INITED();
-    ASAN_READ_RANGE(ctx, s, (length + 1) * sizeof(wchar_t));
-  }
-  return length;
-}
-
 INTERCEPTOR(char*, strncpy, char *to, const char *from, uptr size) {
   void *ctx;
   ASAN_INTERCEPTOR_ENTER(ctx, strncpy);
@@ -697,9 +699,7 @@
 #if ASAN_INTERCEPT_FORK
 INTERCEPTOR(int, fork, void) {
   ENSURE_ASAN_INITED();
-  if (common_flags()->coverage) CovBeforeFork();
   int pid = REAL(fork)();
-  if (common_flags()->coverage) CovAfterFork(pid);
   return pid;
 }
 #endif  // ASAN_INTERCEPT_FORK
@@ -715,7 +715,6 @@
   // Intercept str* functions.
   ASAN_INTERCEPT_FUNC(strcat);  // NOLINT
   ASAN_INTERCEPT_FUNC(strcpy);  // NOLINT
-  ASAN_INTERCEPT_FUNC(wcslen);
   ASAN_INTERCEPT_FUNC(strncat);
   ASAN_INTERCEPT_FUNC(strncpy);
   ASAN_INTERCEPT_FUNC(strdup);
@@ -749,6 +748,9 @@
 #if ASAN_INTERCEPT__LONGJMP
   ASAN_INTERCEPT_FUNC(_longjmp);
 #endif
+#if ASAN_INTERCEPT___LONGJMP_CHK
+  ASAN_INTERCEPT_FUNC(__longjmp_chk);
+#endif
 #if ASAN_INTERCEPT_SIGLONGJMP
   ASAN_INTERCEPT_FUNC(siglongjmp);
 #endif
diff --git a/lib/asan/asan_interceptors.h b/lib/asan/asan_interceptors.h
index d747c31..93fca4f 100644
--- a/lib/asan/asan_interceptors.h
+++ b/lib/asan/asan_interceptors.h
@@ -58,6 +58,12 @@
 # define ASAN_INTERCEPT_SIGLONGJMP 0
 #endif
 
+#if SANITIZER_LINUX && !SANITIZER_ANDROID
+# define ASAN_INTERCEPT___LONGJMP_CHK 1
+#else
+# define ASAN_INTERCEPT___LONGJMP_CHK 0
+#endif
+
 // Android bug: https://code.google.com/p/android/issues/detail?id=61799
 #if ASAN_HAS_EXCEPTIONS && !SANITIZER_WINDOWS && \
     !(SANITIZER_ANDROID && defined(__i386))
diff --git a/lib/asan/asan_interface.inc b/lib/asan/asan_interface.inc
new file mode 100644
index 0000000..e65f617
--- /dev/null
+++ b/lib/asan/asan_interface.inc
@@ -0,0 +1,169 @@
+//===-- asan_interface.inc ------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// Asan interface list.
+//===----------------------------------------------------------------------===//
+INTERFACE_FUNCTION(__asan_addr_is_in_fake_stack)
+INTERFACE_FUNCTION(__asan_address_is_poisoned)
+INTERFACE_FUNCTION(__asan_after_dynamic_init)
+INTERFACE_FUNCTION(__asan_alloca_poison)
+INTERFACE_FUNCTION(__asan_allocas_unpoison)
+INTERFACE_FUNCTION(__asan_before_dynamic_init)
+INTERFACE_FUNCTION(__asan_describe_address)
+INTERFACE_FUNCTION(__asan_exp_load1)
+INTERFACE_FUNCTION(__asan_exp_load2)
+INTERFACE_FUNCTION(__asan_exp_load4)
+INTERFACE_FUNCTION(__asan_exp_load8)
+INTERFACE_FUNCTION(__asan_exp_load16)
+INTERFACE_FUNCTION(__asan_exp_loadN)
+INTERFACE_FUNCTION(__asan_exp_store1)
+INTERFACE_FUNCTION(__asan_exp_store2)
+INTERFACE_FUNCTION(__asan_exp_store4)
+INTERFACE_FUNCTION(__asan_exp_store8)
+INTERFACE_FUNCTION(__asan_exp_store16)
+INTERFACE_FUNCTION(__asan_exp_storeN)
+INTERFACE_FUNCTION(__asan_get_alloc_stack)
+INTERFACE_FUNCTION(__asan_get_current_fake_stack)
+INTERFACE_FUNCTION(__asan_get_free_stack)
+INTERFACE_FUNCTION(__asan_get_report_access_size)
+INTERFACE_FUNCTION(__asan_get_report_access_type)
+INTERFACE_FUNCTION(__asan_get_report_address)
+INTERFACE_FUNCTION(__asan_get_report_bp)
+INTERFACE_FUNCTION(__asan_get_report_description)
+INTERFACE_FUNCTION(__asan_get_report_pc)
+INTERFACE_FUNCTION(__asan_get_report_sp)
+INTERFACE_FUNCTION(__asan_get_shadow_mapping)
+INTERFACE_FUNCTION(__asan_handle_no_return)
+INTERFACE_FUNCTION(__asan_init)
+INTERFACE_FUNCTION(__asan_load_cxx_array_cookie)
+INTERFACE_FUNCTION(__asan_load1)
+INTERFACE_FUNCTION(__asan_load2)
+INTERFACE_FUNCTION(__asan_load4)
+INTERFACE_FUNCTION(__asan_load8)
+INTERFACE_FUNCTION(__asan_load16)
+INTERFACE_FUNCTION(__asan_loadN)
+INTERFACE_FUNCTION(__asan_load1_noabort)
+INTERFACE_FUNCTION(__asan_load2_noabort)
+INTERFACE_FUNCTION(__asan_load4_noabort)
+INTERFACE_FUNCTION(__asan_load8_noabort)
+INTERFACE_FUNCTION(__asan_load16_noabort)
+INTERFACE_FUNCTION(__asan_loadN_noabort)
+INTERFACE_FUNCTION(__asan_locate_address)
+INTERFACE_FUNCTION(__asan_memcpy)
+INTERFACE_FUNCTION(__asan_memmove)
+INTERFACE_FUNCTION(__asan_memset)
+INTERFACE_FUNCTION(__asan_poison_cxx_array_cookie)
+INTERFACE_FUNCTION(__asan_poison_intra_object_redzone)
+INTERFACE_FUNCTION(__asan_poison_memory_region)
+INTERFACE_FUNCTION(__asan_poison_stack_memory)
+INTERFACE_FUNCTION(__asan_print_accumulated_stats)
+INTERFACE_FUNCTION(__asan_region_is_poisoned)
+INTERFACE_FUNCTION(__asan_register_globals)
+INTERFACE_FUNCTION(__asan_register_elf_globals)
+INTERFACE_FUNCTION(__asan_register_image_globals)
+INTERFACE_FUNCTION(__asan_report_error)
+INTERFACE_FUNCTION(__asan_report_exp_load1)
+INTERFACE_FUNCTION(__asan_report_exp_load2)
+INTERFACE_FUNCTION(__asan_report_exp_load4)
+INTERFACE_FUNCTION(__asan_report_exp_load8)
+INTERFACE_FUNCTION(__asan_report_exp_load16)
+INTERFACE_FUNCTION(__asan_report_exp_load_n)
+INTERFACE_FUNCTION(__asan_report_exp_store1)
+INTERFACE_FUNCTION(__asan_report_exp_store2)
+INTERFACE_FUNCTION(__asan_report_exp_store4)
+INTERFACE_FUNCTION(__asan_report_exp_store8)
+INTERFACE_FUNCTION(__asan_report_exp_store16)
+INTERFACE_FUNCTION(__asan_report_exp_store_n)
+INTERFACE_FUNCTION(__asan_report_load1)
+INTERFACE_FUNCTION(__asan_report_load2)
+INTERFACE_FUNCTION(__asan_report_load4)
+INTERFACE_FUNCTION(__asan_report_load8)
+INTERFACE_FUNCTION(__asan_report_load16)
+INTERFACE_FUNCTION(__asan_report_load_n)
+INTERFACE_FUNCTION(__asan_report_load1_noabort)
+INTERFACE_FUNCTION(__asan_report_load2_noabort)
+INTERFACE_FUNCTION(__asan_report_load4_noabort)
+INTERFACE_FUNCTION(__asan_report_load8_noabort)
+INTERFACE_FUNCTION(__asan_report_load16_noabort)
+INTERFACE_FUNCTION(__asan_report_load_n_noabort)
+INTERFACE_FUNCTION(__asan_report_present)
+INTERFACE_FUNCTION(__asan_report_store1)
+INTERFACE_FUNCTION(__asan_report_store2)
+INTERFACE_FUNCTION(__asan_report_store4)
+INTERFACE_FUNCTION(__asan_report_store8)
+INTERFACE_FUNCTION(__asan_report_store16)
+INTERFACE_FUNCTION(__asan_report_store_n)
+INTERFACE_FUNCTION(__asan_report_store1_noabort)
+INTERFACE_FUNCTION(__asan_report_store2_noabort)
+INTERFACE_FUNCTION(__asan_report_store4_noabort)
+INTERFACE_FUNCTION(__asan_report_store8_noabort)
+INTERFACE_FUNCTION(__asan_report_store16_noabort)
+INTERFACE_FUNCTION(__asan_report_store_n_noabort)
+INTERFACE_FUNCTION(__asan_set_death_callback)
+INTERFACE_FUNCTION(__asan_set_error_report_callback)
+INTERFACE_FUNCTION(__asan_set_shadow_00)
+INTERFACE_FUNCTION(__asan_set_shadow_f1)
+INTERFACE_FUNCTION(__asan_set_shadow_f2)
+INTERFACE_FUNCTION(__asan_set_shadow_f3)
+INTERFACE_FUNCTION(__asan_set_shadow_f5)
+INTERFACE_FUNCTION(__asan_set_shadow_f8)
+INTERFACE_FUNCTION(__asan_stack_free_0)
+INTERFACE_FUNCTION(__asan_stack_free_1)
+INTERFACE_FUNCTION(__asan_stack_free_2)
+INTERFACE_FUNCTION(__asan_stack_free_3)
+INTERFACE_FUNCTION(__asan_stack_free_4)
+INTERFACE_FUNCTION(__asan_stack_free_5)
+INTERFACE_FUNCTION(__asan_stack_free_6)
+INTERFACE_FUNCTION(__asan_stack_free_7)
+INTERFACE_FUNCTION(__asan_stack_free_8)
+INTERFACE_FUNCTION(__asan_stack_free_9)
+INTERFACE_FUNCTION(__asan_stack_free_10)
+INTERFACE_FUNCTION(__asan_stack_malloc_0)
+INTERFACE_FUNCTION(__asan_stack_malloc_1)
+INTERFACE_FUNCTION(__asan_stack_malloc_2)
+INTERFACE_FUNCTION(__asan_stack_malloc_3)
+INTERFACE_FUNCTION(__asan_stack_malloc_4)
+INTERFACE_FUNCTION(__asan_stack_malloc_5)
+INTERFACE_FUNCTION(__asan_stack_malloc_6)
+INTERFACE_FUNCTION(__asan_stack_malloc_7)
+INTERFACE_FUNCTION(__asan_stack_malloc_8)
+INTERFACE_FUNCTION(__asan_stack_malloc_9)
+INTERFACE_FUNCTION(__asan_stack_malloc_10)
+INTERFACE_FUNCTION(__asan_store1)
+INTERFACE_FUNCTION(__asan_store2)
+INTERFACE_FUNCTION(__asan_store4)
+INTERFACE_FUNCTION(__asan_store8)
+INTERFACE_FUNCTION(__asan_store16)
+INTERFACE_FUNCTION(__asan_storeN)
+INTERFACE_FUNCTION(__asan_store1_noabort)
+INTERFACE_FUNCTION(__asan_store2_noabort)
+INTERFACE_FUNCTION(__asan_store4_noabort)
+INTERFACE_FUNCTION(__asan_store8_noabort)
+INTERFACE_FUNCTION(__asan_store16_noabort)
+INTERFACE_FUNCTION(__asan_storeN_noabort)
+INTERFACE_FUNCTION(__asan_unpoison_intra_object_redzone)
+INTERFACE_FUNCTION(__asan_unpoison_memory_region)
+INTERFACE_FUNCTION(__asan_unpoison_stack_memory)
+INTERFACE_FUNCTION(__asan_unregister_globals)
+INTERFACE_FUNCTION(__asan_unregister_elf_globals)
+INTERFACE_FUNCTION(__asan_unregister_image_globals)
+INTERFACE_FUNCTION(__asan_version_mismatch_check_v8)
+INTERFACE_FUNCTION(__sanitizer_finish_switch_fiber)
+INTERFACE_FUNCTION(__sanitizer_print_stack_trace)
+INTERFACE_FUNCTION(__sanitizer_ptr_cmp)
+INTERFACE_FUNCTION(__sanitizer_ptr_sub)
+INTERFACE_FUNCTION(__sanitizer_start_switch_fiber)
+INTERFACE_FUNCTION(__sanitizer_unaligned_load16)
+INTERFACE_FUNCTION(__sanitizer_unaligned_load32)
+INTERFACE_FUNCTION(__sanitizer_unaligned_load64)
+INTERFACE_FUNCTION(__sanitizer_unaligned_store16)
+INTERFACE_FUNCTION(__sanitizer_unaligned_store32)
+INTERFACE_FUNCTION(__sanitizer_unaligned_store64)
+INTERFACE_WEAK_FUNCTION(__asan_default_options)
+INTERFACE_WEAK_FUNCTION(__asan_default_suppressions)
+INTERFACE_WEAK_FUNCTION(__asan_on_error)
diff --git a/lib/asan/asan_interface_internal.h b/lib/asan/asan_interface_internal.h
index 8cd424c..b974c0c 100644
--- a/lib/asan/asan_interface_internal.h
+++ b/lib/asan/asan_interface_internal.h
@@ -67,6 +67,11 @@
   SANITIZER_INTERFACE_ATTRIBUTE
   void __asan_unregister_image_globals(uptr *flag);
 
+  SANITIZER_INTERFACE_ATTRIBUTE
+  void __asan_register_elf_globals(uptr *flag, void *start, void *stop);
+  SANITIZER_INTERFACE_ATTRIBUTE
+  void __asan_unregister_elf_globals(uptr *flag, void *start, void *stop);
+
   // These two functions should be called by the instrumented code.
   // 'globals' is an array of structures describing 'n' globals.
   SANITIZER_INTERFACE_ATTRIBUTE
@@ -165,12 +170,12 @@
   void __asan_set_error_report_callback(void (*callback)(const char*));
 
   SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-  /* OPTIONAL */ void __asan_on_error();
+  void __asan_on_error();
 
   SANITIZER_INTERFACE_ATTRIBUTE void __asan_print_accumulated_stats();
 
   SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-  /* OPTIONAL */ const char* __asan_default_options();
+  const char* __asan_default_options();
 
   SANITIZER_INTERFACE_ATTRIBUTE
   extern uptr __asan_shadow_memory_dynamic_address;
@@ -242,6 +247,9 @@
   void __asan_alloca_poison(uptr addr, uptr size);
   SANITIZER_INTERFACE_ATTRIBUTE
   void __asan_allocas_unpoison(uptr top, uptr bottom);
+
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  const char* __asan_default_suppressions();
 }  // extern "C"
 
 #endif  // ASAN_INTERFACE_INTERNAL_H
diff --git a/lib/asan/asan_internal.h b/lib/asan/asan_internal.h
index 1dc678c..f09bbd8 100644
--- a/lib/asan/asan_internal.h
+++ b/lib/asan/asan_internal.h
@@ -64,9 +64,9 @@
 
 // asan_win.cc
 void InitializePlatformExceptionHandlers();
-
-// asan_win.cc / asan_posix.cc
-const char *DescribeSignalOrException(int signo);
+// Returns whether an address is a valid allocated system heap block.
+// 'addr' must point to the beginning of the block.
+bool IsSystemHeapAddress(uptr addr);
 
 // asan_rtl.cc
 void NORETURN ShowStatsAndAbort();
@@ -75,6 +75,7 @@
 void ReplaceSystemMalloc();
 
 // asan_linux.cc / asan_mac.cc / asan_win.cc
+uptr FindDynamicShadowStart();
 void *AsanDoesNotSupportStaticLinkage();
 void AsanCheckDynamicRTPrereqs();
 void AsanCheckIncompatibleRT();
diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc
index c051573..6d47ba4 100644
--- a/lib/asan/asan_linux.cc
+++ b/lib/asan/asan_linux.cc
@@ -70,12 +70,18 @@
 
 void InitializePlatformInterceptors() {}
 void InitializePlatformExceptionHandlers() {}
+bool IsSystemHeapAddress (uptr addr) { return false; }
 
 void *AsanDoesNotSupportStaticLinkage() {
   // This will fail to link with -static.
   return &_DYNAMIC;  // defined in link.h
 }
 
+uptr FindDynamicShadowStart() {
+  UNREACHABLE("FindDynamicShadowStart is not available");
+  return 0;
+}
+
 void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
   UNIMPLEMENTED();
 }
@@ -110,7 +116,7 @@
 }
 
 void AsanCheckDynamicRTPrereqs() {
-  if (!ASAN_DYNAMIC)
+  if (!ASAN_DYNAMIC || !flags()->verify_asan_link_order)
     return;
 
   // Ensure that dynamic RT is the first DSO in the list
@@ -139,9 +145,9 @@
       // system libraries, causing crashes later in ASan initialization.
       MemoryMappingLayout proc_maps(/*cache_enabled*/true);
       char filename[128];
-      while (proc_maps.Next(nullptr, nullptr, nullptr, filename,
-                            sizeof(filename), nullptr)) {
-        if (IsDynamicRTName(filename)) {
+      MemoryMappedSegment segment(filename, sizeof(filename));
+      while (proc_maps.Next(&segment)) {
+        if (IsDynamicRTName(segment.filename)) {
           Report("Your application is linked against "
                  "incompatible ASan runtimes.\n");
           Die();
diff --git a/lib/asan/asan_mac.cc b/lib/asan/asan_mac.cc
index 38189a9..b7af1a5 100644
--- a/lib/asan/asan_mac.cc
+++ b/lib/asan/asan_mac.cc
@@ -48,12 +48,36 @@
 
 void InitializePlatformInterceptors() {}
 void InitializePlatformExceptionHandlers() {}
+bool IsSystemHeapAddress (uptr addr) { return false; }
 
 // No-op. Mac does not support static linkage anyway.
 void *AsanDoesNotSupportStaticLinkage() {
   return 0;
 }
 
+uptr FindDynamicShadowStart() {
+  uptr granularity = GetMmapGranularity();
+  uptr alignment = 8 * granularity;
+  uptr left_padding = granularity;
+  uptr space_size = kHighShadowEnd + left_padding;
+
+  uptr largest_gap_found = 0;
+  uptr shadow_start = FindAvailableMemoryRange(space_size, alignment,
+                                               granularity, &largest_gap_found);
+  // If the shadow doesn't fit, restrict the address space to make it fit.
+  if (shadow_start == 0) {
+    uptr new_max_vm = RoundDownTo(largest_gap_found << SHADOW_SCALE, alignment);
+    RestrictMemoryToMaxAddress(new_max_vm);
+    kHighMemEnd = new_max_vm - 1;
+    space_size = kHighShadowEnd + left_padding;
+    shadow_start =
+        FindAvailableMemoryRange(space_size, alignment, granularity, nullptr);
+  }
+  CHECK_NE((uptr)0, shadow_start);
+  CHECK(IsAligned(shadow_start, alignment));
+  return shadow_start;
+}
+
 // No-op. Mac does not support static linkage anyway.
 void AsanCheckDynamicRTPrereqs() {}
 
diff --git a/lib/asan/asan_malloc_linux.cc b/lib/asan/asan_malloc_linux.cc
index 8c99d3b..fd40f47 100644
--- a/lib/asan/asan_malloc_linux.cc
+++ b/lib/asan/asan_malloc_linux.cc
@@ -60,36 +60,42 @@
 #endif // SANITIZER_INTERCEPT_CFREE
 
 INTERCEPTOR(void*, malloc, uptr size) {
-  if (UNLIKELY(!asan_inited))
+  if (UNLIKELY(asan_init_is_running))
     // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym.
     return AllocateFromLocalPool(size);
+  ENSURE_ASAN_INITED();
   GET_STACK_TRACE_MALLOC;
   return asan_malloc(size, &stack);
 }
 
 INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) {
-  if (UNLIKELY(!asan_inited))
+  if (UNLIKELY(asan_init_is_running))
     // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym.
     return AllocateFromLocalPool(nmemb * size);
+  ENSURE_ASAN_INITED();
   GET_STACK_TRACE_MALLOC;
   return asan_calloc(nmemb, size, &stack);
 }
 
 INTERCEPTOR(void*, realloc, void *ptr, uptr size) {
-  GET_STACK_TRACE_MALLOC;
   if (UNLIKELY(IsInDlsymAllocPool(ptr))) {
-    uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym;
-    uptr copy_size = Min(size, kDlsymAllocPoolSize - offset);
+    const uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym;
+    const uptr copy_size = Min(size, kDlsymAllocPoolSize - offset);
     void *new_ptr;
-    if (UNLIKELY(!asan_inited)) {
+    if (UNLIKELY(asan_init_is_running)) {
       new_ptr = AllocateFromLocalPool(size);
     } else {
-      copy_size = size;
-      new_ptr = asan_malloc(copy_size, &stack);
+      ENSURE_ASAN_INITED();
+      GET_STACK_TRACE_MALLOC;
+      new_ptr = asan_malloc(size, &stack);
     }
     internal_memcpy(new_ptr, ptr, copy_size);
     return new_ptr;
   }
+  if (UNLIKELY(asan_init_is_running))
+    return AllocateFromLocalPool(size);
+  ENSURE_ASAN_INITED();
+  GET_STACK_TRACE_MALLOC;
   return asan_realloc(ptr, size, &stack);
 }
 
diff --git a/lib/asan/asan_malloc_win.cc b/lib/asan/asan_malloc_win.cc
index 5163c04..efa0582 100644
--- a/lib/asan/asan_malloc_win.cc
+++ b/lib/asan/asan_malloc_win.cc
@@ -100,7 +100,7 @@
 
 ALLOCATION_FUNCTION_ATTRIBUTE
 void *_realloc_dbg(void *ptr, size_t size, int) {
-  CHECK(!"_realloc_dbg should not exist!");
+  UNREACHABLE("_realloc_dbg should not exist!");
   return 0;
 }
 
diff --git a/lib/asan/asan_mapping.h b/lib/asan/asan_mapping.h
index d8e60a4..695740c 100644
--- a/lib/asan/asan_mapping.h
+++ b/lib/asan/asan_mapping.h
@@ -191,7 +191,6 @@
 
 #define SHADOW_GRANULARITY (1ULL << SHADOW_SCALE)
 #define MEM_TO_SHADOW(mem) (((mem) >> SHADOW_SCALE) + (SHADOW_OFFSET))
-#define SHADOW_TO_MEM(shadow) (((shadow) - SHADOW_OFFSET) << SHADOW_SCALE)
 
 #define kLowMemBeg      0
 #define kLowMemEnd      (SHADOW_OFFSET ? SHADOW_OFFSET - 1 : 0)
diff --git a/lib/asan/asan_memory_profile.cc b/lib/asan/asan_memory_profile.cc
index c2678b9..05846c3 100644
--- a/lib/asan/asan_memory_profile.cc
+++ b/lib/asan/asan_memory_profile.cc
@@ -48,7 +48,7 @@
     }
   }
 
-  void Print(uptr top_percent) {
+  void Print(uptr top_percent, uptr max_number_of_contexts) {
     InternalSort(&allocations_, allocations_.size(),
                  [](const AllocationSite &a, const AllocationSite &b) {
                    return a.total_size > b.total_size;
@@ -57,12 +57,14 @@
     uptr total_shown = 0;
     Printf("Live Heap Allocations: %zd bytes in %zd chunks; quarantined: "
            "%zd bytes in %zd chunks; %zd other chunks; total chunks: %zd; "
-           "showing top %zd%%\n",
+           "showing top %zd%% (at most %zd unique contexts)\n",
            total_allocated_user_size_, total_allocated_count_,
            total_quarantined_user_size_, total_quarantined_count_,
            total_other_count_, total_allocated_count_ +
-           total_quarantined_count_ + total_other_count_, top_percent);
-    for (uptr i = 0; i < allocations_.size(); i++) {
+           total_quarantined_count_ + total_other_count_, top_percent,
+           max_number_of_contexts);
+    for (uptr i = 0; i < Min(allocations_.size(), max_number_of_contexts);
+         i++) {
       auto &a = allocations_[i];
       Printf("%zd byte(s) (%zd%%) in %zd allocation(s)\n", a.total_size,
              a.total_size * 100 / total_allocated_user_size_, a.count);
@@ -103,16 +105,23 @@
                             void *argument) {
   HeapProfile hp;
   __lsan::ForEachChunk(ChunkCallback, &hp);
-  hp.Print(reinterpret_cast<uptr>(argument));
+  uptr *Arg = reinterpret_cast<uptr*>(argument);
+  hp.Print(Arg[0], Arg[1]);
 }
 
 }  // namespace __asan
 
+#endif  // CAN_SANITIZE_LEAKS
+
 extern "C" {
 SANITIZER_INTERFACE_ATTRIBUTE
-void __sanitizer_print_memory_profile(uptr top_percent) {
-  __sanitizer::StopTheWorld(__asan::MemoryProfileCB, (void*)top_percent);
+void __sanitizer_print_memory_profile(uptr top_percent,
+                                      uptr max_number_of_contexts) {
+#if CAN_SANITIZE_LEAKS
+  uptr Arg[2];
+  Arg[0] = top_percent;
+  Arg[1] = max_number_of_contexts;
+  __sanitizer::StopTheWorld(__asan::MemoryProfileCB, Arg);
+#endif  // CAN_SANITIZE_LEAKS
 }
 }  // extern "C"
-
-#endif  // CAN_SANITIZE_LEAKS
diff --git a/lib/asan/asan_new_delete.cc b/lib/asan/asan_new_delete.cc
index 3283fb3..e68c7f3 100644
--- a/lib/asan/asan_new_delete.cc
+++ b/lib/asan/asan_new_delete.cc
@@ -25,22 +25,26 @@
 // dllexport would normally do. We need to export them in order to make the
 // VS2015 dynamic CRT (MD) work.
 #if SANITIZER_WINDOWS
-# define CXX_OPERATOR_ATTRIBUTE
-# ifdef _WIN64
-#  pragma comment(linker, "/export:??2@YAPEAX_K@Z")   // operator new
-#  pragma comment(linker, "/export:??3@YAXPEAX@Z")    // operator delete
-#  pragma comment(linker, "/export:??3@YAXPEAX_K@Z")  // sized operator delete
-#  pragma comment(linker, "/export:??_U@YAPEAX_K@Z")  // operator new[]
-#  pragma comment(linker, "/export:??_V@YAXPEAX@Z")   // operator delete[]
-# else
-#  pragma comment(linker, "/export:??2@YAPAXI@Z")   // operator new
-#  pragma comment(linker, "/export:??3@YAXPAX@Z")   // operator delete
-#  pragma comment(linker, "/export:??3@YAXPAXI@Z")  // sized operator delete
-#  pragma comment(linker, "/export:??_U@YAPAXI@Z")  // operator new[]
-#  pragma comment(linker, "/export:??_V@YAXPAX@Z")  // operator delete[]
-# endif
+#define CXX_OPERATOR_ATTRIBUTE
+#define COMMENT_EXPORT(sym) __pragma(comment(linker, "/export:" sym))
+#ifdef _WIN64
+COMMENT_EXPORT("??2@YAPEAX_K@Z")                     // operator new
+COMMENT_EXPORT("??2@YAPEAX_KAEBUnothrow_t@std@@@Z")  // operator new nothrow
+COMMENT_EXPORT("??3@YAXPEAX@Z")                      // operator delete
+COMMENT_EXPORT("??3@YAXPEAX_K@Z")                    // sized operator delete
+COMMENT_EXPORT("??_U@YAPEAX_K@Z")                    // operator new[]
+COMMENT_EXPORT("??_V@YAXPEAX@Z")                     // operator delete[]
 #else
-# define CXX_OPERATOR_ATTRIBUTE INTERCEPTOR_ATTRIBUTE
+COMMENT_EXPORT("??2@YAPAXI@Z")                    // operator new
+COMMENT_EXPORT("??2@YAPAXIABUnothrow_t@std@@@Z")  // operator new nothrow
+COMMENT_EXPORT("??3@YAXPAX@Z")                    // operator delete
+COMMENT_EXPORT("??3@YAXPAXI@Z")                   // sized operator delete
+COMMENT_EXPORT("??_U@YAPAXI@Z")                   // operator new[]
+COMMENT_EXPORT("??_V@YAXPAX@Z")                   // operator delete[]
+#endif
+#undef COMMENT_EXPORT
+#else
+#define CXX_OPERATOR_ATTRIBUTE INTERCEPTOR_ATTRIBUTE
 #endif
 
 using namespace __asan;  // NOLINT
@@ -63,12 +67,17 @@
 enum class align_val_t: size_t {};
 }  // namespace std
 
-#define OPERATOR_NEW_BODY(type) \
+// TODO(alekseys): throw std::bad_alloc instead of dying on OOM.
+#define OPERATOR_NEW_BODY(type, nothrow) \
   GET_STACK_TRACE_MALLOC;\
-  return asan_memalign(0, size, &stack, type);
-#define OPERATOR_NEW_BODY_ALIGN(type) \
+  void *res = asan_memalign(0, size, &stack, type);\
+  if (!nothrow && UNLIKELY(!res)) DieOnFailure::OnOOM();\
+  return res;
+#define OPERATOR_NEW_BODY_ALIGN(type, nothrow) \
   GET_STACK_TRACE_MALLOC;\
-  return asan_memalign((uptr)align, size, &stack, type);
+  void *res = asan_memalign((uptr)align, size, &stack, type);\
+  if (!nothrow && UNLIKELY(!res)) DieOnFailure::OnOOM();\
+  return res;
 
 // On OS X it's not enough to just provide our own 'operator new' and
 // 'operator delete' implementations, because they're going to be in the
@@ -79,40 +88,42 @@
 // OS X we need to intercept them using their mangled names.
 #if !SANITIZER_MAC
 CXX_OPERATOR_ATTRIBUTE
-void *operator new(size_t size) { OPERATOR_NEW_BODY(FROM_NEW); }
+void *operator new(size_t size)
+{ OPERATOR_NEW_BODY(FROM_NEW, false /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
-void *operator new[](size_t size) { OPERATOR_NEW_BODY(FROM_NEW_BR); }
+void *operator new[](size_t size)
+{ OPERATOR_NEW_BODY(FROM_NEW_BR, false /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new(size_t size, std::nothrow_t const&)
-{ OPERATOR_NEW_BODY(FROM_NEW); }
+{ OPERATOR_NEW_BODY(FROM_NEW, true /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new[](size_t size, std::nothrow_t const&)
-{ OPERATOR_NEW_BODY(FROM_NEW_BR); }
+{ OPERATOR_NEW_BODY(FROM_NEW_BR, true /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new(size_t size, std::align_val_t align)
-{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW); }
+{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW, false /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new[](size_t size, std::align_val_t align)
-{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW_BR); }
+{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW_BR, false /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new(size_t size, std::align_val_t align, std::nothrow_t const&)
-{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW); }
+{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW, true /*nothrow*/); }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new[](size_t size, std::align_val_t align, std::nothrow_t const&)
-{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW_BR); }
+{ OPERATOR_NEW_BODY_ALIGN(FROM_NEW_BR, true /*nothrow*/); }
 
 #else  // SANITIZER_MAC
 INTERCEPTOR(void *, _Znwm, size_t size) {
-  OPERATOR_NEW_BODY(FROM_NEW);
+  OPERATOR_NEW_BODY(FROM_NEW, false /*nothrow*/);
 }
 INTERCEPTOR(void *, _Znam, size_t size) {
-  OPERATOR_NEW_BODY(FROM_NEW_BR);
+  OPERATOR_NEW_BODY(FROM_NEW_BR, false /*nothrow*/);
 }
 INTERCEPTOR(void *, _ZnwmRKSt9nothrow_t, size_t size, std::nothrow_t const&) {
-  OPERATOR_NEW_BODY(FROM_NEW);
+  OPERATOR_NEW_BODY(FROM_NEW, true /*nothrow*/);
 }
 INTERCEPTOR(void *, _ZnamRKSt9nothrow_t, size_t size, std::nothrow_t const&) {
-  OPERATOR_NEW_BODY(FROM_NEW_BR);
+  OPERATOR_NEW_BODY(FROM_NEW_BR, true /*nothrow*/);
 }
 #endif
 
diff --git a/lib/asan/asan_posix.cc b/lib/asan/asan_posix.cc
index 8e56763..added74 100644
--- a/lib/asan/asan_posix.cc
+++ b/lib/asan/asan_posix.cc
@@ -33,19 +33,6 @@
 
 namespace __asan {
 
-const char *DescribeSignalOrException(int signo) {
-  switch (signo) {
-    case SIGFPE:
-      return "FPE";
-    case SIGILL:
-      return "ILL";
-    case SIGABRT:
-      return "ABRT";
-    default:
-      return "SEGV";
-  }
-}
-
 void AsanOnDeadlySignal(int signo, void *siginfo, void *context) {
   ScopedDeadlySignal signal_scope(GetCurrentThread());
   int code = (int)((siginfo_t*)siginfo)->si_code;
@@ -72,7 +59,7 @@
   //   lis r0,-10000
   //   stdux r1,r1,r0 # store sp to [sp-10000] and update sp by -10000
   // If the store faults then sp will not have been updated, so test above
-  // will not work, becase the fault address will be more than just "slightly"
+  // will not work, because the fault address will be more than just "slightly"
   // below sp.
   if (!IsStackAccess && IsAccessibleMemoryRange(sig.pc, 4)) {
     u32 inst = *(unsigned *)sig.pc;
diff --git a/lib/asan/asan_report.cc b/lib/asan/asan_report.cc
index d1c3cda..2e477f2 100644
--- a/lib/asan/asan_report.cc
+++ b/lib/asan/asan_report.cc
@@ -204,6 +204,14 @@
       error_report_callback(buffer_copy.data());
     }
 
+    if (halt_on_error_ && common_flags()->abort_on_error) {
+      // On Android the message is truncated to 512 characters.
+      // FIXME: implement "compact" error format, possibly without, or with
+      // highly compressed stack traces?
+      // FIXME: or just use the summary line as abort message?
+      SetAbortMessage(buffer_copy.data());
+    }
+
     // In halt_on_error = false mode, reset the current error object (before
     // unlocking).
     if (!halt_on_error_)
@@ -496,9 +504,6 @@
 }
 } // extern "C"
 
-#if !SANITIZER_SUPPORTS_WEAK_HOOKS
 // Provide default implementation of __asan_on_error that does nothing
 // and may be overriden by user.
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE NOINLINE
-void __asan_on_error() {}
-#endif
+SANITIZER_INTERFACE_WEAK_DEF(void, __asan_on_error, void) {}
diff --git a/lib/asan/asan_rtl.cc b/lib/asan/asan_rtl.cc
index d9d7d7e..5ae3568 100644
--- a/lib/asan/asan_rtl.cc
+++ b/lib/asan/asan_rtl.cc
@@ -438,15 +438,7 @@
   if (shadow_start == kDefaultShadowSentinel) {
     __asan_shadow_memory_dynamic_address = 0;
     CHECK_EQ(0, kLowShadowBeg);
-
-    uptr granularity = GetMmapGranularity();
-    uptr alignment = 8 * granularity;
-    uptr left_padding = granularity;
-    uptr space_size = kHighShadowEnd + left_padding;
-
-    shadow_start = FindAvailableMemoryRange(space_size, alignment, granularity);
-    CHECK_NE((uptr)0, shadow_start);
-    CHECK(IsAligned(shadow_start, alignment));
+    shadow_start = FindDynamicShadowStart();
   }
   // Update the shadow memory address (potentially) used by instrumentation.
   __asan_shadow_memory_dynamic_address = shadow_start;
diff --git a/lib/asan/asan_suppressions.cc b/lib/asan/asan_suppressions.cc
index 62c868d..ac8aa02 100644
--- a/lib/asan/asan_suppressions.cc
+++ b/lib/asan/asan_suppressions.cc
@@ -31,15 +31,9 @@
     kInterceptorName, kInterceptorViaFunction, kInterceptorViaLibrary,
     kODRViolation};
 
-extern "C" {
-#if SANITIZER_SUPPORTS_WEAK_HOOKS
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-const char *__asan_default_suppressions();
-#else
-// No week hooks, provide empty implementation.
-const char *__asan_default_suppressions() { return ""; }
-#endif  // SANITIZER_SUPPORTS_WEAK_HOOKS
-}  // extern "C"
+SANITIZER_INTERFACE_WEAK_DEF(const char *, __asan_default_suppressions, void) {
+  return "";
+}
 
 void InitializeSuppressions() {
   CHECK_EQ(nullptr, suppression_ctx);
diff --git a/lib/asan/asan_thread.cc b/lib/asan/asan_thread.cc
index 2f9fa81..b1a0d9a 100644
--- a/lib/asan/asan_thread.cc
+++ b/lib/asan/asan_thread.cc
@@ -166,16 +166,19 @@
 }
 
 inline AsanThread::StackBounds AsanThread::GetStackBounds() const {
-  if (!atomic_load(&stack_switching_, memory_order_acquire))
-    return StackBounds{stack_bottom_, stack_top_};  // NOLINT
+  if (!atomic_load(&stack_switching_, memory_order_acquire)) {
+    // Make sure the stack bounds are fully initialized.
+    if (stack_bottom_ >= stack_top_) return {0, 0};
+    return {stack_bottom_, stack_top_};
+  }
   char local;
   const uptr cur_stack = (uptr)&local;
   // Note: need to check next stack first, because FinishSwitchFiber
   // may be in process of overwriting stack_top_/bottom_. But in such case
   // we are already on the next stack.
   if (cur_stack >= next_stack_bottom_ && cur_stack < next_stack_top_)
-    return StackBounds{next_stack_bottom_, next_stack_top_};  // NOLINT
-  return StackBounds{stack_bottom_, stack_top_};              // NOLINT
+    return {next_stack_bottom_, next_stack_top_};
+  return {stack_bottom_, stack_top_};
 }
 
 uptr AsanThread::stack_top() {
@@ -237,7 +240,7 @@
 }
 
 thread_return_t AsanThread::ThreadStart(
-    uptr os_id, atomic_uintptr_t *signal_thread_is_registered) {
+    tid_t os_id, atomic_uintptr_t *signal_thread_is_registered) {
   Init();
   asanThreadRegistry().StartThread(tid(), os_id, /*workerthread*/ false,
                                    nullptr);
@@ -300,24 +303,27 @@
     return true;
   }
   uptr aligned_addr = addr & ~(SANITIZER_WORDSIZE/8 - 1);  // align addr.
+  uptr mem_ptr = RoundDownTo(aligned_addr, SHADOW_GRANULARITY);
   u8 *shadow_ptr = (u8*)MemToShadow(aligned_addr);
   u8 *shadow_bottom = (u8*)MemToShadow(bottom);
 
   while (shadow_ptr >= shadow_bottom &&
          *shadow_ptr != kAsanStackLeftRedzoneMagic) {
     shadow_ptr--;
+    mem_ptr -= SHADOW_GRANULARITY;
   }
 
   while (shadow_ptr >= shadow_bottom &&
          *shadow_ptr == kAsanStackLeftRedzoneMagic) {
     shadow_ptr--;
+    mem_ptr -= SHADOW_GRANULARITY;
   }
 
   if (shadow_ptr < shadow_bottom) {
     return false;
   }
 
-  uptr* ptr = (uptr*)SHADOW_TO_MEM((uptr)(shadow_ptr + 1));
+  uptr* ptr = (uptr*)(mem_ptr + SHADOW_GRANULARITY);
   CHECK(ptr[0] == kCurrentStackFrameMagic);
   access->offset = addr - (uptr)ptr;
   access->frame_pc = ptr[2];
@@ -392,7 +398,7 @@
     context->os_id = GetTid();
 }
 
-__asan::AsanThread *GetAsanThreadByOsIDLocked(uptr os_id) {
+__asan::AsanThread *GetAsanThreadByOsIDLocked(tid_t os_id) {
   __asan::AsanThreadContext *context = static_cast<__asan::AsanThreadContext *>(
       __asan::asanThreadRegistry().FindThreadContextByOsIDLocked(os_id));
   if (!context) return nullptr;
@@ -402,7 +408,7 @@
 
 // --- Implementation of LSan-specific functions --- {{{1
 namespace __lsan {
-bool GetThreadRangesLocked(uptr os_id, uptr *stack_begin, uptr *stack_end,
+bool GetThreadRangesLocked(tid_t os_id, uptr *stack_begin, uptr *stack_end,
                            uptr *tls_begin, uptr *tls_end, uptr *cache_begin,
                            uptr *cache_end, DTLS **dtls) {
   __asan::AsanThread *t = __asan::GetAsanThreadByOsIDLocked(os_id);
@@ -418,7 +424,7 @@
   return true;
 }
 
-void ForEachExtraStackRange(uptr os_id, RangeIteratorCallback callback,
+void ForEachExtraStackRange(tid_t os_id, RangeIteratorCallback callback,
                             void *arg) {
   __asan::AsanThread *t = __asan::GetAsanThreadByOsIDLocked(os_id);
   if (t && t->has_fake_stack())
diff --git a/lib/asan/asan_thread.h b/lib/asan/asan_thread.h
index f53dfb7..424f9e6 100644
--- a/lib/asan/asan_thread.h
+++ b/lib/asan/asan_thread.h
@@ -63,7 +63,7 @@
   void Destroy();
 
   void Init();  // Should be called from the thread itself.
-  thread_return_t ThreadStart(uptr os_id,
+  thread_return_t ThreadStart(tid_t os_id,
                               atomic_uintptr_t *signal_thread_is_registered);
 
   uptr stack_top();
diff --git a/lib/asan/asan_win.cc b/lib/asan/asan_win.cc
index 78268d8..8a839d9 100644
--- a/lib/asan/asan_win.cc
+++ b/lib/asan/asan_win.cc
@@ -19,7 +19,6 @@
 
 #include <stdlib.h>
 
-#include "asan_globals_win.h"
 #include "asan_interceptors.h"
 #include "asan_internal.h"
 #include "asan_report.h"
@@ -28,6 +27,8 @@
 #include "asan_mapping.h"
 #include "sanitizer_common/sanitizer_libc.h"
 #include "sanitizer_common/sanitizer_mutex.h"
+#include "sanitizer_common/sanitizer_win.h"
+#include "sanitizer_common/sanitizer_win_defs.h"
 
 using namespace __asan;  // NOLINT
 
@@ -43,35 +44,50 @@
   __asan_init();
   return __asan_shadow_memory_dynamic_address;
 }
-
-// -------------------- A workaround for the absence of weak symbols ----- {{{
-// We don't have a direct equivalent of weak symbols when using MSVC, but we can
-// use the /alternatename directive to tell the linker to default a specific
-// symbol to a specific value, which works nicely for allocator hooks and
-// __asan_default_options().
-void __sanitizer_default_malloc_hook(void *ptr, uptr size) { }
-void __sanitizer_default_free_hook(void *ptr) { }
-const char* __asan_default_default_options() { return ""; }
-const char* __asan_default_default_suppressions() { return ""; }
-void __asan_default_on_error() {}
-// 64-bit msvc will not prepend an underscore for symbols.
-#ifdef _WIN64
-#pragma comment(linker, "/alternatename:__sanitizer_malloc_hook=__sanitizer_default_malloc_hook")  // NOLINT
-#pragma comment(linker, "/alternatename:__sanitizer_free_hook=__sanitizer_default_free_hook")      // NOLINT
-#pragma comment(linker, "/alternatename:__asan_default_options=__asan_default_default_options")    // NOLINT
-#pragma comment(linker, "/alternatename:__asan_default_suppressions=__asan_default_default_suppressions")    // NOLINT
-#pragma comment(linker, "/alternatename:__asan_on_error=__asan_default_on_error")                  // NOLINT
-#else
-#pragma comment(linker, "/alternatename:___sanitizer_malloc_hook=___sanitizer_default_malloc_hook")  // NOLINT
-#pragma comment(linker, "/alternatename:___sanitizer_free_hook=___sanitizer_default_free_hook")      // NOLINT
-#pragma comment(linker, "/alternatename:___asan_default_options=___asan_default_default_options")    // NOLINT
-#pragma comment(linker, "/alternatename:___asan_default_suppressions=___asan_default_default_suppressions")    // NOLINT
-#pragma comment(linker, "/alternatename:___asan_on_error=___asan_default_on_error")                  // NOLINT
-#endif
-// }}}
 }  // extern "C"
 
 // ---------------------- Windows-specific interceptors ---------------- {{{
+static LPTOP_LEVEL_EXCEPTION_FILTER default_seh_handler;
+static LPTOP_LEVEL_EXCEPTION_FILTER user_seh_handler;
+
+extern "C" SANITIZER_INTERFACE_ATTRIBUTE
+long __asan_unhandled_exception_filter(EXCEPTION_POINTERS *info) {
+  EXCEPTION_RECORD *exception_record = info->ExceptionRecord;
+  CONTEXT *context = info->ContextRecord;
+
+  // FIXME: Handle EXCEPTION_STACK_OVERFLOW here.
+
+  SignalContext sig = SignalContext::Create(exception_record, context);
+  ReportDeadlySignal(exception_record->ExceptionCode, sig);
+  UNREACHABLE("returned from reporting deadly signal");
+}
+
+// Wrapper SEH Handler. If the exception should be handled by asan, we call
+// __asan_unhandled_exception_filter, otherwise, we execute the user provided
+// exception handler or the default.
+static long WINAPI SEHHandler(EXCEPTION_POINTERS *info) {
+  DWORD exception_code = info->ExceptionRecord->ExceptionCode;
+  if (__sanitizer::IsHandledDeadlyException(exception_code))
+    return __asan_unhandled_exception_filter(info);
+  if (user_seh_handler)
+    return user_seh_handler(info);
+  // Bubble out to the default exception filter.
+  if (default_seh_handler)
+    return default_seh_handler(info);
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+
+INTERCEPTOR_WINAPI(LPTOP_LEVEL_EXCEPTION_FILTER, SetUnhandledExceptionFilter,
+    LPTOP_LEVEL_EXCEPTION_FILTER ExceptionFilter) {
+  CHECK(REAL(SetUnhandledExceptionFilter));
+  if (ExceptionFilter == &SEHHandler)
+    return REAL(SetUnhandledExceptionFilter)(ExceptionFilter);
+  // We record the user provided exception handler to be called for all the
+  // exceptions unhandled by asan.
+  Swap(ExceptionFilter, user_seh_handler);
+  return ExceptionFilter;
+}
+
 INTERCEPTOR_WINAPI(void, RtlRaiseException, EXCEPTION_RECORD *ExceptionRecord) {
   CHECK(REAL(RtlRaiseException));
   // This is a noreturn function, unless it's one of the exceptions raised to
@@ -144,6 +160,7 @@
 
 void InitializePlatformInterceptors() {
   ASAN_INTERCEPT_FUNC(CreateThread);
+  ASAN_INTERCEPT_FUNC(SetUnhandledExceptionFilter);
 
 #ifdef _WIN64
   ASAN_INTERCEPT_FUNC(__C_specific_handler);
@@ -200,6 +217,18 @@
   return 0;
 }
 
+uptr FindDynamicShadowStart() {
+  uptr granularity = GetMmapGranularity();
+  uptr alignment = 8 * granularity;
+  uptr left_padding = granularity;
+  uptr space_size = kHighShadowEnd + left_padding;
+  uptr shadow_start =
+      FindAvailableMemoryRange(space_size, alignment, granularity, nullptr);
+  CHECK_NE((uptr)0, shadow_start);
+  CHECK(IsAligned(shadow_start, alignment));
+  return shadow_start;
+}
+
 void AsanCheckDynamicRTPrereqs() {}
 
 void AsanCheckIncompatibleRT() {}
@@ -260,60 +289,8 @@
 #endif
 }
 
-static LPTOP_LEVEL_EXCEPTION_FILTER default_seh_handler;
-
-// Check based on flags if we should report this exception.
-static bool ShouldReportDeadlyException(unsigned code) {
-  switch (code) {
-    case EXCEPTION_ACCESS_VIOLATION:
-    case EXCEPTION_IN_PAGE_ERROR:
-      return common_flags()->handle_segv;
-    case EXCEPTION_BREAKPOINT:
-    case EXCEPTION_ILLEGAL_INSTRUCTION: {
-      return common_flags()->handle_sigill;
-    }
-  }
-  return false;
-}
-
-// Return the textual name for this exception.
-const char *DescribeSignalOrException(int signo) {
-  unsigned code = signo;
-  // Get the string description of the exception if this is a known deadly
-  // exception.
-  switch (code) {
-    case EXCEPTION_ACCESS_VIOLATION:
-      return "access-violation";
-    case EXCEPTION_IN_PAGE_ERROR:
-      return "in-page-error";
-    case EXCEPTION_BREAKPOINT:
-      return "breakpoint";
-    case EXCEPTION_ILLEGAL_INSTRUCTION:
-      return "illegal-instruction";
-  }
-  return nullptr;
-}
-
-extern "C" SANITIZER_INTERFACE_ATTRIBUTE
-long __asan_unhandled_exception_filter(EXCEPTION_POINTERS *info) {
-  EXCEPTION_RECORD *exception_record = info->ExceptionRecord;
-  CONTEXT *context = info->ContextRecord;
-
-  // Continue the search if the signal wasn't deadly.
-  if (!ShouldReportDeadlyException(exception_record->ExceptionCode))
-    return EXCEPTION_CONTINUE_SEARCH;
-  // FIXME: Handle EXCEPTION_STACK_OVERFLOW here.
-
-  SignalContext sig = SignalContext::Create(exception_record, context);
-  ReportDeadlySignal(exception_record->ExceptionCode, sig);
-  UNREACHABLE("returned from reporting deadly signal");
-}
-
-static long WINAPI SEHHandler(EXCEPTION_POINTERS *info) {
-  __asan_unhandled_exception_filter(info);
-
-  // Bubble out to the default exception filter.
-  return default_seh_handler(info);
+bool IsSystemHeapAddress(uptr addr) {
+  return ::HeapValidate(GetProcessHeap(), 0, (void*)addr) != FALSE;
 }
 
 // We want to install our own exception handler (EH) to print helpful reports
@@ -368,7 +345,7 @@
     unsigned long, void *) = asan_thread_init;
 #endif
 
-ASAN_LINK_GLOBALS_WIN()
+WIN_FORCE_LINK(__asan_dso_reg_hook)
 
 // }}}
 }  // namespace __asan
diff --git a/lib/asan/asan_win_dll_thunk.cc b/lib/asan/asan_win_dll_thunk.cc
index 4764fd0..c67116c 100644
--- a/lib/asan/asan_win_dll_thunk.cc
+++ b/lib/asan/asan_win_dll_thunk.cc
@@ -15,388 +15,41 @@
 // See https://github.com/google/sanitizers/issues/209 for the details.
 //===----------------------------------------------------------------------===//
 
-// Only compile this code when building asan_dll_thunk.lib
-// Using #ifdef rather than relying on Makefiles etc.
-// simplifies the build procedure.
-#ifdef ASAN_DLL_THUNK
+#ifdef SANITIZER_DLL_THUNK
 #include "asan_init_version.h"
-#include "asan_globals_win.h"
 #include "interception/interception.h"
+#include "sanitizer_common/sanitizer_win_defs.h"
+#include "sanitizer_common/sanitizer_win_dll_thunk.h"
 #include "sanitizer_common/sanitizer_platform_interceptors.h"
 
-#ifdef _M_IX86
-#define WINAPI __stdcall
-#else
-#define WINAPI
-#endif
+// ASan own interface functions.
+#define INTERFACE_FUNCTION(Name) INTERCEPT_SANITIZER_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "asan_interface.inc"
 
-// ---------- Function interception helper functions and macros ----------- {{{1
-extern "C" {
-void *WINAPI GetModuleHandleA(const char *module_name);
-void *WINAPI GetProcAddress(void *module, const char *proc_name);
-void abort();
-}
+// Memory allocation functions.
+INTERCEPT_WRAP_V_W(free)
+INTERCEPT_WRAP_V_W(_free_base)
+INTERCEPT_WRAP_V_WW(_free_dbg)
 
-using namespace __sanitizer;
+INTERCEPT_WRAP_W_W(malloc)
+INTERCEPT_WRAP_W_W(_malloc_base)
+INTERCEPT_WRAP_W_WWWW(_malloc_dbg)
 
-static uptr getRealProcAddressOrDie(const char *name) {
-  uptr ret =
-      __interception::InternalGetProcAddress((void *)GetModuleHandleA(0), name);
-  if (!ret)
-    abort();
-  return ret;
-}
+INTERCEPT_WRAP_W_WW(calloc)
+INTERCEPT_WRAP_W_WW(_calloc_base)
+INTERCEPT_WRAP_W_WWWWW(_calloc_dbg)
+INTERCEPT_WRAP_W_WWW(_calloc_impl)
 
-// We need to intercept some functions (e.g. ASan interface, memory allocator --
-// let's call them "hooks") exported by the DLL thunk and forward the hooks to
-// the runtime in the main module.
-// However, we don't want to keep two lists of these hooks.
-// To avoid that, the list of hooks should be defined using the
-// INTERCEPT_WHEN_POSSIBLE macro. Then, all these hooks can be intercepted
-// at once by calling INTERCEPT_HOOKS().
+INTERCEPT_WRAP_W_WW(realloc)
+INTERCEPT_WRAP_W_WW(_realloc_base)
+INTERCEPT_WRAP_W_WWW(_realloc_dbg)
+INTERCEPT_WRAP_W_WWW(_recalloc)
+INTERCEPT_WRAP_W_WWW(_recalloc_base)
 
-// Use macro+template magic to automatically generate the list of hooks.
-// Each hook at line LINE defines a template class with a static
-// FunctionInterceptor<LINE>::Execute() method intercepting the hook.
-// The default implementation of FunctionInterceptor<LINE> is to call
-// the Execute() method corresponding to the previous line.
-template<int LINE>
-struct FunctionInterceptor {
-  static void Execute() { FunctionInterceptor<LINE-1>::Execute(); }
-};
-
-// There shouldn't be any hooks with negative definition line number.
-template<>
-struct FunctionInterceptor<0> {
-  static void Execute() {}
-};
-
-#define INTERCEPT_WHEN_POSSIBLE(main_function, dll_function)                   \
-  template <> struct FunctionInterceptor<__LINE__> {                           \
-    static void Execute() {                                                    \
-      uptr wrapper = getRealProcAddressOrDie(main_function);                   \
-      if (!__interception::OverrideFunction((uptr)dll_function, wrapper, 0))   \
-        abort();                                                               \
-      FunctionInterceptor<__LINE__ - 1>::Execute();                            \
-    }                                                                          \
-  };
-
-// Special case of hooks -- ASan own interface functions.  Those are only called
-// after __asan_init, thus an empty implementation is sufficient.
-#define INTERFACE_FUNCTION(name)                                               \
-  extern "C" __declspec(noinline) void name() {                                \
-    volatile int prevent_icf = (__LINE__ << 8); (void)prevent_icf;             \
-    __debugbreak();                                                            \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name)
-
-// INTERCEPT_HOOKS must be used after the last INTERCEPT_WHEN_POSSIBLE.
-#define INTERCEPT_HOOKS FunctionInterceptor<__LINE__>::Execute
-
-// We can't define our own version of strlen etc. because that would lead to
-// link-time or even type mismatch errors.  Instead, we can declare a function
-// just to be able to get its address.  Me may miss the first few calls to the
-// functions since it can be called before __asan_init, but that would lead to
-// false negatives in the startup code before user's global initializers, which
-// isn't a big deal.
-#define INTERCEPT_LIBRARY_FUNCTION(name)                                       \
-  extern "C" void name();                                                      \
-  INTERCEPT_WHEN_POSSIBLE(WRAPPER_NAME(name), name)
-
-// Disable compiler warnings that show up if we declare our own version
-// of a compiler intrinsic (e.g. strlen).
-#pragma warning(disable: 4391)
-#pragma warning(disable: 4392)
-
-static void InterceptHooks();
-// }}}
-
-// ---------- Function wrapping helpers ----------------------------------- {{{1
-#define WRAP_V_V(name)                                                         \
-  extern "C" void name() {                                                     \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    fn();                                                                      \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_V_W(name)                                                         \
-  extern "C" void name(void *arg) {                                            \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    fn(arg);                                                                   \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_V_WW(name)                                                        \
-  extern "C" void name(void *arg1, void *arg2) {                               \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    fn(arg1, arg2);                                                            \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_V_WWW(name)                                                       \
-  extern "C" void name(void *arg1, void *arg2, void *arg3) {                   \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    fn(arg1, arg2, arg3);                                                      \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_V(name)                                                         \
-  extern "C" void *name() {                                                    \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn();                                                               \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_W(name)                                                         \
-  extern "C" void *name(void *arg) {                                           \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn(arg);                                                            \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_WW(name)                                                        \
-  extern "C" void *name(void *arg1, void *arg2) {                              \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn(arg1, arg2);                                                     \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_WWW(name)                                                       \
-  extern "C" void *name(void *arg1, void *arg2, void *arg3) {                  \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn(arg1, arg2, arg3);                                               \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_WWWW(name)                                                      \
-  extern "C" void *name(void *arg1, void *arg2, void *arg3, void *arg4) {      \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn(arg1, arg2, arg3, arg4);                                         \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_WWWWW(name)                                                     \
-  extern "C" void *name(void *arg1, void *arg2, void *arg3, void *arg4,        \
-                        void *arg5) {                                          \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn(arg1, arg2, arg3, arg4, arg5);                                   \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-
-#define WRAP_W_WWWWWW(name)                                                    \
-  extern "C" void *name(void *arg1, void *arg2, void *arg3, void *arg4,        \
-                        void *arg5, void *arg6) {                              \
-    typedef decltype(name) *fntype;                                            \
-    static fntype fn = (fntype)getRealProcAddressOrDie(#name);                 \
-    return fn(arg1, arg2, arg3, arg4, arg5, arg6);                             \
-  }                                                                            \
-  INTERCEPT_WHEN_POSSIBLE(#name, name);
-// }}}
-
-// ----------------- ASan own interface functions --------------------
-// Don't use the INTERFACE_FUNCTION machinery for this function as we actually
-// want to call it in the __asan_init interceptor.
-WRAP_W_V(__asan_should_detect_stack_use_after_return)
-WRAP_W_V(__asan_get_shadow_memory_dynamic_address)
-
-extern "C" {
-  int __asan_option_detect_stack_use_after_return;
-  uptr __asan_shadow_memory_dynamic_address;
-
-  // Manually wrap __asan_init as we need to initialize
-  // __asan_option_detect_stack_use_after_return afterwards.
-  void __asan_init() {
-    typedef void (*fntype)();
-    static fntype fn = 0;
-    // __asan_init is expected to be called by only one thread.
-    if (fn) return;
-
-    fn = (fntype)getRealProcAddressOrDie("__asan_init");
-    fn();
-    __asan_option_detect_stack_use_after_return =
-        (__asan_should_detect_stack_use_after_return() != 0);
-    __asan_shadow_memory_dynamic_address =
-        (uptr)__asan_get_shadow_memory_dynamic_address();
-    InterceptHooks();
-  }
-}
-
-extern "C" void __asan_version_mismatch_check() {
-  // Do nothing.
-}
-
-INTERFACE_FUNCTION(__asan_handle_no_return)
-INTERFACE_FUNCTION(__asan_unhandled_exception_filter)
-
-INTERFACE_FUNCTION(__asan_report_store1)
-INTERFACE_FUNCTION(__asan_report_store2)
-INTERFACE_FUNCTION(__asan_report_store4)
-INTERFACE_FUNCTION(__asan_report_store8)
-INTERFACE_FUNCTION(__asan_report_store16)
-INTERFACE_FUNCTION(__asan_report_store_n)
-
-INTERFACE_FUNCTION(__asan_report_load1)
-INTERFACE_FUNCTION(__asan_report_load2)
-INTERFACE_FUNCTION(__asan_report_load4)
-INTERFACE_FUNCTION(__asan_report_load8)
-INTERFACE_FUNCTION(__asan_report_load16)
-INTERFACE_FUNCTION(__asan_report_load_n)
-
-INTERFACE_FUNCTION(__asan_store1)
-INTERFACE_FUNCTION(__asan_store2)
-INTERFACE_FUNCTION(__asan_store4)
-INTERFACE_FUNCTION(__asan_store8)
-INTERFACE_FUNCTION(__asan_store16)
-INTERFACE_FUNCTION(__asan_storeN)
-
-INTERFACE_FUNCTION(__asan_load1)
-INTERFACE_FUNCTION(__asan_load2)
-INTERFACE_FUNCTION(__asan_load4)
-INTERFACE_FUNCTION(__asan_load8)
-INTERFACE_FUNCTION(__asan_load16)
-INTERFACE_FUNCTION(__asan_loadN)
-
-INTERFACE_FUNCTION(__asan_memcpy);
-INTERFACE_FUNCTION(__asan_memset);
-INTERFACE_FUNCTION(__asan_memmove);
-
-INTERFACE_FUNCTION(__asan_set_shadow_00);
-INTERFACE_FUNCTION(__asan_set_shadow_f1);
-INTERFACE_FUNCTION(__asan_set_shadow_f2);
-INTERFACE_FUNCTION(__asan_set_shadow_f3);
-INTERFACE_FUNCTION(__asan_set_shadow_f5);
-INTERFACE_FUNCTION(__asan_set_shadow_f8);
-
-INTERFACE_FUNCTION(__asan_alloca_poison);
-INTERFACE_FUNCTION(__asan_allocas_unpoison);
-
-INTERFACE_FUNCTION(__asan_register_globals)
-INTERFACE_FUNCTION(__asan_unregister_globals)
-
-INTERFACE_FUNCTION(__asan_before_dynamic_init)
-INTERFACE_FUNCTION(__asan_after_dynamic_init)
-
-INTERFACE_FUNCTION(__asan_poison_stack_memory)
-INTERFACE_FUNCTION(__asan_unpoison_stack_memory)
-
-INTERFACE_FUNCTION(__asan_poison_memory_region)
-INTERFACE_FUNCTION(__asan_unpoison_memory_region)
-
-INTERFACE_FUNCTION(__asan_address_is_poisoned)
-INTERFACE_FUNCTION(__asan_region_is_poisoned)
-
-INTERFACE_FUNCTION(__asan_get_current_fake_stack)
-INTERFACE_FUNCTION(__asan_addr_is_in_fake_stack)
-
-INTERFACE_FUNCTION(__asan_stack_malloc_0)
-INTERFACE_FUNCTION(__asan_stack_malloc_1)
-INTERFACE_FUNCTION(__asan_stack_malloc_2)
-INTERFACE_FUNCTION(__asan_stack_malloc_3)
-INTERFACE_FUNCTION(__asan_stack_malloc_4)
-INTERFACE_FUNCTION(__asan_stack_malloc_5)
-INTERFACE_FUNCTION(__asan_stack_malloc_6)
-INTERFACE_FUNCTION(__asan_stack_malloc_7)
-INTERFACE_FUNCTION(__asan_stack_malloc_8)
-INTERFACE_FUNCTION(__asan_stack_malloc_9)
-INTERFACE_FUNCTION(__asan_stack_malloc_10)
-
-INTERFACE_FUNCTION(__asan_stack_free_0)
-INTERFACE_FUNCTION(__asan_stack_free_1)
-INTERFACE_FUNCTION(__asan_stack_free_2)
-INTERFACE_FUNCTION(__asan_stack_free_4)
-INTERFACE_FUNCTION(__asan_stack_free_5)
-INTERFACE_FUNCTION(__asan_stack_free_6)
-INTERFACE_FUNCTION(__asan_stack_free_7)
-INTERFACE_FUNCTION(__asan_stack_free_8)
-INTERFACE_FUNCTION(__asan_stack_free_9)
-INTERFACE_FUNCTION(__asan_stack_free_10)
-
-// FIXME: we might want to have a sanitizer_win_dll_thunk?
-INTERFACE_FUNCTION(__sanitizer_annotate_contiguous_container)
-INTERFACE_FUNCTION(__sanitizer_contiguous_container_find_bad_address)
-INTERFACE_FUNCTION(__sanitizer_cov)
-INTERFACE_FUNCTION(__sanitizer_cov_dump)
-INTERFACE_FUNCTION(__sanitizer_dump_coverage)
-INTERFACE_FUNCTION(__sanitizer_dump_trace_pc_guard_coverage)
-INTERFACE_FUNCTION(__sanitizer_cov_indir_call16)
-INTERFACE_FUNCTION(__sanitizer_cov_init)
-INTERFACE_FUNCTION(__sanitizer_cov_module_init)
-INTERFACE_FUNCTION(__sanitizer_cov_trace_basic_block)
-INTERFACE_FUNCTION(__sanitizer_cov_trace_func_enter)
-INTERFACE_FUNCTION(__sanitizer_cov_trace_pc_guard)
-INTERFACE_FUNCTION(__sanitizer_cov_trace_pc_guard_init)
-INTERFACE_FUNCTION(__sanitizer_cov_with_check)
-INTERFACE_FUNCTION(__sanitizer_get_allocated_size)
-INTERFACE_FUNCTION(__sanitizer_get_coverage_guards)
-INTERFACE_FUNCTION(__sanitizer_get_current_allocated_bytes)
-INTERFACE_FUNCTION(__sanitizer_get_estimated_allocated_size)
-INTERFACE_FUNCTION(__sanitizer_get_free_bytes)
-INTERFACE_FUNCTION(__sanitizer_get_heap_size)
-INTERFACE_FUNCTION(__sanitizer_get_ownership)
-INTERFACE_FUNCTION(__sanitizer_get_total_unique_caller_callee_pairs)
-INTERFACE_FUNCTION(__sanitizer_get_total_unique_coverage)
-INTERFACE_FUNCTION(__sanitizer_get_unmapped_bytes)
-INTERFACE_FUNCTION(__sanitizer_maybe_open_cov_file)
-INTERFACE_FUNCTION(__sanitizer_print_stack_trace)
-INTERFACE_FUNCTION(__sanitizer_symbolize_pc)
-INTERFACE_FUNCTION(__sanitizer_symbolize_global)
-INTERFACE_FUNCTION(__sanitizer_ptr_cmp)
-INTERFACE_FUNCTION(__sanitizer_ptr_sub)
-INTERFACE_FUNCTION(__sanitizer_report_error_summary)
-INTERFACE_FUNCTION(__sanitizer_reset_coverage)
-INTERFACE_FUNCTION(__sanitizer_get_number_of_counters)
-INTERFACE_FUNCTION(__sanitizer_update_counter_bitset_and_clear_counters)
-INTERFACE_FUNCTION(__sanitizer_sandbox_on_notify)
-INTERFACE_FUNCTION(__sanitizer_set_death_callback)
-INTERFACE_FUNCTION(__sanitizer_set_report_path)
-INTERFACE_FUNCTION(__sanitizer_set_report_fd)
-INTERFACE_FUNCTION(__sanitizer_unaligned_load16)
-INTERFACE_FUNCTION(__sanitizer_unaligned_load32)
-INTERFACE_FUNCTION(__sanitizer_unaligned_load64)
-INTERFACE_FUNCTION(__sanitizer_unaligned_store16)
-INTERFACE_FUNCTION(__sanitizer_unaligned_store32)
-INTERFACE_FUNCTION(__sanitizer_unaligned_store64)
-INTERFACE_FUNCTION(__sanitizer_verify_contiguous_container)
-INTERFACE_FUNCTION(__sanitizer_install_malloc_and_free_hooks)
-INTERFACE_FUNCTION(__sanitizer_start_switch_fiber)
-INTERFACE_FUNCTION(__sanitizer_finish_switch_fiber)
-INTERFACE_FUNCTION(__sanitizer_get_module_and_offset_for_pc)
-
-// TODO(timurrrr): Add more interface functions on the as-needed basis.
-
-// ----------------- Memory allocation functions ---------------------
-WRAP_V_W(free)
-WRAP_V_W(_free_base)
-WRAP_V_WW(_free_dbg)
-
-WRAP_W_W(malloc)
-WRAP_W_W(_malloc_base)
-WRAP_W_WWWW(_malloc_dbg)
-
-WRAP_W_WW(calloc)
-WRAP_W_WW(_calloc_base)
-WRAP_W_WWWWW(_calloc_dbg)
-WRAP_W_WWW(_calloc_impl)
-
-WRAP_W_WW(realloc)
-WRAP_W_WW(_realloc_base)
-WRAP_W_WWW(_realloc_dbg)
-WRAP_W_WWW(_recalloc)
-WRAP_W_WWW(_recalloc_base)
-
-WRAP_W_W(_msize)
-WRAP_W_W(_expand)
-WRAP_W_W(_expand_dbg)
+INTERCEPT_WRAP_W_W(_msize)
+INTERCEPT_WRAP_W_W(_expand)
+INTERCEPT_WRAP_W_W(_expand_dbg)
 
 // TODO(timurrrr): Might want to add support for _aligned_* allocation
 // functions to detect a bit more bugs.  Those functions seem to wrap malloc().
@@ -405,20 +58,6 @@
 
 INTERCEPT_LIBRARY_FUNCTION(atoi);
 INTERCEPT_LIBRARY_FUNCTION(atol);
-
-#ifdef _WIN64
-INTERCEPT_LIBRARY_FUNCTION(__C_specific_handler);
-#else
-INTERCEPT_LIBRARY_FUNCTION(_except_handler3);
-
-// _except_handler4 checks -GS cookie which is different for each module, so we
-// can't use INTERCEPT_LIBRARY_FUNCTION(_except_handler4).
-INTERCEPTOR(int, _except_handler4, void *a, void *b, void *c, void *d) {
-  __asan_handle_no_return();
-  return REAL(_except_handler4)(a, b, c, d);
-}
-#endif
-
 INTERCEPT_LIBRARY_FUNCTION(frexp);
 INTERCEPT_LIBRARY_FUNCTION(longjmp);
 #if SANITIZER_INTERCEPT_MEMCHR
@@ -443,41 +82,71 @@
 INTERCEPT_LIBRARY_FUNCTION(strrchr);
 INTERCEPT_LIBRARY_FUNCTION(strspn);
 INTERCEPT_LIBRARY_FUNCTION(strstr);
+INTERCEPT_LIBRARY_FUNCTION(strtok);
 INTERCEPT_LIBRARY_FUNCTION(strtol);
 INTERCEPT_LIBRARY_FUNCTION(wcslen);
+INTERCEPT_LIBRARY_FUNCTION(wcsnlen);
 
-// Must be after all the interceptor declarations due to the way INTERCEPT_HOOKS
-// is defined.
-void InterceptHooks() {
-  INTERCEPT_HOOKS();
+#ifdef _WIN64
+INTERCEPT_LIBRARY_FUNCTION(__C_specific_handler);
+#else
+INTERCEPT_LIBRARY_FUNCTION(_except_handler3);
+// _except_handler4 checks -GS cookie which is different for each module, so we
+// can't use INTERCEPT_LIBRARY_FUNCTION(_except_handler4).
+INTERCEPTOR(int, _except_handler4, void *a, void *b, void *c, void *d) {
+  __asan_handle_no_return();
+  return REAL(_except_handler4)(a, b, c, d);
+}
+#endif
+
+// Window specific functions not included in asan_interface.inc.
+INTERCEPT_WRAP_W_V(__asan_should_detect_stack_use_after_return)
+INTERCEPT_WRAP_W_V(__asan_get_shadow_memory_dynamic_address)
+INTERCEPT_WRAP_W_W(__asan_unhandled_exception_filter)
+
+using namespace __sanitizer;
+
+extern "C" {
+int __asan_option_detect_stack_use_after_return;
+uptr __asan_shadow_memory_dynamic_address;
+} // extern "C"
+
+static int asan_dll_thunk_init() {
+  typedef void (*fntype)();
+  static fntype fn = 0;
+  // asan_dll_thunk_init is expected to be called by only one thread.
+  if (fn) return 0;
+
+  // Ensure all interception was executed.
+  __dll_thunk_init();
+
+  fn = (fntype) dllThunkGetRealAddrOrDie("__asan_init");
+  fn();
+  __asan_option_detect_stack_use_after_return =
+      (__asan_should_detect_stack_use_after_return() != 0);
+  __asan_shadow_memory_dynamic_address =
+      (uptr)__asan_get_shadow_memory_dynamic_address();
+
 #ifndef _WIN64
   INTERCEPT_FUNCTION(_except_handler4);
 #endif
-}
-
-// We want to call __asan_init before C/C++ initializers/constructors are
-// executed, otherwise functions like memset might be invoked.
-// For some strange reason, merely linking in asan_preinit.cc doesn't work
-// as the callback is never called...  Is link.exe doing something too smart?
-
-// In DLLs, the callbacks are expected to return 0,
-// otherwise CRT initialization fails.
-static int call_asan_init() {
-  __asan_init();
+  // In DLLs, the callbacks are expected to return 0,
+  // otherwise CRT initialization fails.
   return 0;
 }
+
 #pragma section(".CRT$XIB", long, read)  // NOLINT
-__declspec(allocate(".CRT$XIB")) int (*__asan_preinit)() = call_asan_init;
+__declspec(allocate(".CRT$XIB")) int (*__asan_preinit)() = asan_dll_thunk_init;
 
 static void WINAPI asan_thread_init(void *mod, unsigned long reason,
-                                   void *reserved) {
-  if (reason == /*DLL_PROCESS_ATTACH=*/1) __asan_init();
+                                    void *reserved) {
+  if (reason == /*DLL_PROCESS_ATTACH=*/1) asan_dll_thunk_init();
 }
 
 #pragma section(".CRT$XLAB", long, read)  // NOLINT
 __declspec(allocate(".CRT$XLAB")) void (WINAPI *__asan_tls_init)(void *,
     unsigned long, void *) = asan_thread_init;
 
-ASAN_LINK_GLOBALS_WIN()
+WIN_FORCE_LINK(__asan_dso_reg_hook)
 
-#endif // ASAN_DLL_THUNK
+#endif // SANITIZER_DLL_THUNK
diff --git a/lib/asan/asan_win_dynamic_runtime_thunk.cc b/lib/asan/asan_win_dynamic_runtime_thunk.cc
index 8e42f03..416c73b 100644
--- a/lib/asan/asan_win_dynamic_runtime_thunk.cc
+++ b/lib/asan/asan_win_dynamic_runtime_thunk.cc
@@ -14,20 +14,24 @@
 // using the default "import library" generated when linking the DLL RTL.
 //
 // This includes:
+//  - creating weak aliases to default implementation imported from asan dll.
 //  - forwarding the detect_stack_use_after_return runtime option
 //  - working around deficiencies of the MD runtime
 //  - installing a custom SEH handler
 //
 //===----------------------------------------------------------------------===//
 
-// Only compile this code when building asan_dynamic_runtime_thunk.lib
-// Using #ifdef rather than relying on Makefiles etc.
-// simplifies the build procedure.
-#ifdef ASAN_DYNAMIC_RUNTIME_THUNK
-#include "asan_globals_win.h"
+#ifdef SANITIZER_DYNAMIC_RUNTIME_THUNK
+#define SANITIZER_IMPORT_INTERFACE 1
+#include "sanitizer_common/sanitizer_win_defs.h"
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
+// Define weak alias for all weak functions imported from asan dll.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) WIN_WEAK_IMPORT_DEF(Name)
+#include "asan_interface.inc"
+
 // First, declare CRT sections we'll be using in this file
 #pragma section(".CRT$XIB", long, read)  // NOLINT
 #pragma section(".CRT$XID", long, read)  // NOLINT
@@ -122,6 +126,6 @@
     SetSEHFilter;
 }
 
-ASAN_LINK_GLOBALS_WIN()
+WIN_FORCE_LINK(__asan_dso_reg_hook)
 
-#endif // ASAN_DYNAMIC_RUNTIME_THUNK
+#endif // SANITIZER_DYNAMIC_RUNTIME_THUNK
diff --git a/lib/asan/asan_win_weak_interception.cc b/lib/asan/asan_win_weak_interception.cc
new file mode 100644
index 0000000..ca26f91
--- /dev/null
+++ b/lib/asan/asan_win_weak_interception.cc
@@ -0,0 +1,23 @@
+//===-- asan_win_weak_interception.cc -------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This module should be included in Address Sanitizer when it is implemented as
+// a shared library on Windows (dll), in order to delegate the calls of weak
+// functions to the implementation in the main executable when a strong
+// definition is provided.
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DYNAMIC
+#include "sanitizer_common/sanitizer_win_weak_interception.h"
+#include "asan_interface_internal.h"
+// Check if strong definitions for weak functions are present in the main
+// executable. If that is the case, override dll functions to point to strong
+// implementations.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "asan_interface.inc"
+#endif // SANITIZER_DYNAMIC
diff --git a/lib/asan/scripts/asan_device_setup b/lib/asan/scripts/asan_device_setup
index fdfc46f..5a4f7c4 100755
--- a/lib/asan/scripts/asan_device_setup
+++ b/lib/asan/scripts/asan_device_setup
@@ -52,7 +52,7 @@
     local STORAGE=`$ADB shell mount | grep /system | cut -d ' ' -f1`
     if [ "$STORAGE" != "" ]; then
       echo Remounting $STORAGE at /system
-      $ADB shell su -c "mount -o remount,rw $STORAGE /system"
+      $ADB shell su -c "mount -o rw,remount $STORAGE /system"
     else
       echo Failed to get storage device name for "/system" mount point
     fi
@@ -327,11 +327,6 @@
 EOF
 }
 
-# On Android-L not allowing user segv handler breaks some applications.
-if [[ PRE_L -eq 0 ]]; then
-    ASAN_OPTIONS="$ASAN_OPTIONS,allow_user_segv_handler=1"
-fi
-
 if [[ x$extra_options != x ]] ; then
     ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options"
 fi
@@ -415,15 +410,15 @@
       install "$TMPDIR/asanwrapper" /system/bin 755
       install "$TMPDIR/asanwrapper64" /system/bin 755
 
-      adb_shell ln -s $ASAN_RT /system/lib/$ASAN_RT_SYMLINK
-      adb_shell ln -s $ASAN_RT64 /system/lib64/$ASAN_RT_SYMLINK
+      adb_shell ln -sf $ASAN_RT /system/lib/$ASAN_RT_SYMLINK
+      adb_shell ln -sf $ASAN_RT64 /system/lib64/$ASAN_RT_SYMLINK
     else
       install "$TMPDIR/$ASAN_RT" /system/lib 644
       install "$TMPDIR/app_process32" /system/bin 755 $CTX
       install "$TMPDIR/app_process.wrap" /system/bin 755 $CTX
       install "$TMPDIR/asanwrapper" /system/bin 755 $CTX
 
-      adb_shell ln -s $ASAN_RT /system/lib/$ASAN_RT_SYMLINK
+      adb_shell ln -sf $ASAN_RT /system/lib/$ASAN_RT_SYMLINK
 
       adb_shell rm /system/bin/app_process
       adb_shell ln -s /system/bin/app_process.wrap /system/bin/app_process
diff --git a/lib/asan/scripts/asan_symbolize.py b/lib/asan/scripts/asan_symbolize.py
index d82c677..1a56e44 100755
--- a/lib/asan/scripts/asan_symbolize.py
+++ b/lib/asan/scripts/asan_symbolize.py
@@ -89,10 +89,12 @@
       for hint in self.dsym_hints:
         cmd.append('--dsym-hint=%s' % hint)
     if DEBUG:
-      print ' '.join(cmd)
+      print(' '.join(cmd))
     try:
       result = subprocess.Popen(cmd, stdin=subprocess.PIPE,
-                                stdout=subprocess.PIPE)
+                                stdout=subprocess.PIPE,
+                                bufsize=0,
+                                universal_newlines=True)
     except OSError:
       result = None
     return result
@@ -105,8 +107,8 @@
     try:
       symbolizer_input = '"%s" %s' % (binary, offset)
       if DEBUG:
-        print symbolizer_input
-      print >> self.pipe.stdin, symbolizer_input
+        print(symbolizer_input)
+      self.pipe.stdin.write("%s\n" % symbolizer_input)
       while True:
         function_name = self.pipe.stdout.readline().rstrip()
         if not function_name:
@@ -151,9 +153,11 @@
       cmd += ['--demangle']
     cmd += ['-e', self.binary]
     if DEBUG:
-      print ' '.join(cmd)
+      print(' '.join(cmd))
     return subprocess.Popen(cmd,
-                            stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+                            stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+                            bufsize=0,
+                            universal_newlines=True)
 
   def symbolize(self, addr, binary, offset):
     """Overrides Symbolizer.symbolize."""
@@ -161,8 +165,8 @@
       return None
     lines = []
     try:
-      print >> self.pipe.stdin, offset
-      print >> self.pipe.stdin, self.output_terminator
+      self.pipe.stdin.write("%s\n" % offset)
+      self.pipe.stdin.write("%s\n" % self.output_terminator)
       is_first_frame = True
       while True:
         function_name = self.pipe.stdout.readline().rstrip()
@@ -219,7 +223,7 @@
 
   def open_atos(self):
     if DEBUG:
-      print 'atos -o %s -arch %s' % (self.binary, self.arch)
+      print('atos -o %s -arch %s' % (self.binary, self.arch))
     cmdline = ['atos', '-o', self.binary, '-arch', self.arch]
     self.atos = UnbufferedLineConverter(cmdline, close_stderr=True)
 
@@ -234,7 +238,7 @@
     #   foo(type1, type2) (in object.name) (filename.cc:80)
     match = re.match('^(.*) \(in (.*)\) \((.*:\d*)\)$', atos_line)
     if DEBUG:
-      print 'atos_line: ', atos_line
+      print('atos_line: ', atos_line)
     if match:
       function_name = match.group(1)
       function_name = re.sub('\(.*?\)', '', function_name)
@@ -348,7 +352,7 @@
       function_name, file_name, line_no = res
       result = ['%s in %s %s:%d' % (
           addr, function_name, file_name, line_no)]
-      print result
+      print(result)
       return result
     else:
       return None
@@ -434,7 +438,7 @@
     self.frame_no = 0
     for line in logfile:
       processed = self.process_line(line)
-      print '\n'.join(processed)
+      print('\n'.join(processed))
 
   def process_line_echo(self, line):
     return [line.rstrip()]
@@ -448,7 +452,7 @@
     if not match:
       return [self.current_line]
     if DEBUG:
-      print line
+      print(line)
     _, frameno_str, addr, binary, offset = match.groups()
     arch = ""
     # Arch can be embedded in the filename, e.g.: "libabc.dylib:x86_64h"
diff --git a/lib/asan/tests/asan_interface_test.cc b/lib/asan/tests/asan_interface_test.cc
index e4e9524..7d3e520 100644
--- a/lib/asan/tests/asan_interface_test.cc
+++ b/lib/asan/tests/asan_interface_test.cc
@@ -14,6 +14,7 @@
 #include "sanitizer_common/sanitizer_internal_defs.h"
 #include <sanitizer/allocator_interface.h>
 #include <sanitizer/asan_interface.h>
+#include <vector>
 
 TEST(AddressSanitizerInterface, GetEstimatedAllocatedSize) {
   EXPECT_EQ(0U, __sanitizer_get_estimated_allocated_size(0));
@@ -101,9 +102,6 @@
   }
 }
 
-#ifndef __powerpc64__
-// FIXME: This has not reliably worked on powerpc since r279664.  Re-enable
-// this once the problem is tracked down and fixed.
 static const size_t kManyThreadsMallocSizes[] = {5, 1UL<<10, 1UL<<14, 357};
 static const size_t kManyThreadsIterations = 250;
 static const size_t kManyThreadsNumThreads =
@@ -137,7 +135,6 @@
   // so we can't check for equality here.
   EXPECT_LT(after_test, before_test + (1UL<<20));
 }
-#endif
 
 static void DoDoubleFree() {
   int *x = Ident(new int);
diff --git a/lib/asan/tests/asan_internal_interface_test.cc b/lib/asan/tests/asan_internal_interface_test.cc
index ae47594..e247bb4 100644
--- a/lib/asan/tests/asan_internal_interface_test.cc
+++ b/lib/asan/tests/asan_internal_interface_test.cc
@@ -12,6 +12,7 @@
 //===----------------------------------------------------------------------===//
 #include "asan_interface_internal.h"
 #include "asan_test_utils.h"
+#include <vector>
 
 TEST(AddressSanitizerInternalInterface, SetShadow) {
   std::vector<char> buffer(17, 0xff);
diff --git a/lib/asan/tests/asan_mac_test_helpers.mm b/lib/asan/tests/asan_mac_test_helpers.mm
index a7e4b9d..3f8fa26 100644
--- a/lib/asan/tests/asan_mac_test_helpers.mm
+++ b/lib/asan/tests/asan_mac_test_helpers.mm
@@ -237,4 +237,5 @@
       [[NSURL alloc] initWithString:@"Saved Application State"
                      relativeToURL:base];
   [u release];
+  [base release];
 }
diff --git a/lib/asan/tests/asan_mem_test.cc b/lib/asan/tests/asan_mem_test.cc
index 4a941fa..c320886 100644
--- a/lib/asan/tests/asan_mem_test.cc
+++ b/lib/asan/tests/asan_mem_test.cc
@@ -11,6 +11,7 @@
 //
 //===----------------------------------------------------------------------===//
 #include "asan_test_utils.h"
+#include <vector>
 
 template<typename T>
 void MemSetOOBTestTemplate(size_t length) {
@@ -76,7 +77,7 @@
 // Strictly speaking we are not guaranteed to find such two pointers,
 // but given the structure of asan's allocator we will.
 static bool AllocateTwoAdjacentArrays(char **x1, char **x2, size_t size) {
-  vector<uintptr_t> v;
+  std::vector<uintptr_t> v;
   bool res = false;
   for (size_t i = 0; i < 1000U && !res; i++) {
     v.push_back(reinterpret_cast<uintptr_t>(new char[size]));
diff --git a/lib/asan/tests/asan_str_test.cc b/lib/asan/tests/asan_str_test.cc
index c790088..964f6da 100644
--- a/lib/asan/tests/asan_str_test.cc
+++ b/lib/asan/tests/asan_str_test.cc
@@ -154,6 +154,33 @@
   free(str);
 }
 
+#if SANITIZER_TEST_HAS_STRNDUP
+TEST(AddressSanitizer, MAYBE_StrNDupOOBTest) {
+  size_t size = Ident(42);
+  char *str = MallocAndMemsetString(size);
+  char *new_str;
+  // Normal strndup calls.
+  str[size - 1] = '\0';
+  new_str = strndup(str, size - 13);
+  free(new_str);
+  new_str = strndup(str + size - 1, 13);
+  free(new_str);
+  // Argument points to not allocated memory.
+  EXPECT_DEATH(Ident(strndup(str - 1, 13)), LeftOOBReadMessage(1));
+  EXPECT_DEATH(Ident(strndup(str + size, 13)), RightOOBReadMessage(0));
+  // Overwrite the terminating '\0' and hit unallocated memory.
+  str[size - 1] = 'z';
+  EXPECT_DEATH(Ident(strndup(str, size + 13)), RightOOBReadMessage(0));
+  // Check handling of non 0 terminated strings.
+  Ident(new_str = strndup(str + size - 1, 0));
+  free(new_str);
+  Ident(new_str = strndup(str + size - 1, 1));
+  free(new_str);
+  EXPECT_DEATH(Ident(strndup(str + size - 1, 2)), RightOOBReadMessage(0));
+  free(str);
+}
+#endif // SANITIZER_TEST_HAS_STRNDUP
+
 TEST(AddressSanitizer, StrCpyOOBTest) {
   size_t to_size = Ident(30);
   size_t from_size = Ident(6);  // less than to_size
diff --git a/lib/asan/tests/asan_test.cc b/lib/asan/tests/asan_test.cc
index 424a79e..7e9cf3b 100644
--- a/lib/asan/tests/asan_test.cc
+++ b/lib/asan/tests/asan_test.cc
@@ -12,6 +12,8 @@
 //===----------------------------------------------------------------------===//
 #include "asan_test_utils.h"
 
+#include <errno.h>
+
 NOINLINE void *malloc_fff(size_t size) {
   void *res = malloc/**/(size); break_optimization(0); return res;}
 NOINLINE void *malloc_eee(size_t size) {
@@ -74,9 +76,11 @@
   delete c;
 
 #if SANITIZER_TEST_HAS_POSIX_MEMALIGN
-  int *pm;
-  int pm_res = posix_memalign((void**)&pm, kPageSize, kPageSize);
+  void *pm = 0;
+  // Valid allocation.
+  int pm_res = posix_memalign(&pm, kPageSize, kPageSize);
   EXPECT_EQ(0, pm_res);
+  EXPECT_NE(nullptr, pm);
   free(pm);
 #endif  // SANITIZER_TEST_HAS_POSIX_MEMALIGN
 
@@ -251,7 +255,8 @@
 namespace {
 
 const char kSEGVCrash[] = "AddressSanitizer: SEGV on unknown address";
-const char kOverriddenHandler[] = "ASan signal handler has been overridden\n";
+const char kOverriddenSigactionHandler[] = "Test sigaction handler\n";
+const char kOverriddenSignalHandler[] = "Test signal handler\n";
 
 TEST(AddressSanitizer, WildAddressTest) {
   char *c = (char*)0x123;
@@ -259,12 +264,12 @@
 }
 
 void my_sigaction_sighandler(int, siginfo_t*, void*) {
-  fprintf(stderr, kOverriddenHandler);
+  fprintf(stderr, kOverriddenSigactionHandler);
   exit(1);
 }
 
 void my_signal_sighandler(int signum) {
-  fprintf(stderr, kOverriddenHandler);
+  fprintf(stderr, kOverriddenSignalHandler);
   exit(1);
 }
 
@@ -273,16 +278,20 @@
   memset(&sigact, 0, sizeof(sigact));
   sigact.sa_sigaction = my_sigaction_sighandler;
   sigact.sa_flags = SA_SIGINFO;
-  // ASan should silently ignore sigaction()...
+  char *c = (char *)0x123;
+
+  EXPECT_DEATH(*c = 0, kSEGVCrash);
+
+  // ASan should allow to set sigaction()...
   EXPECT_EQ(0, sigaction(SIGSEGV, &sigact, 0));
 #ifdef __APPLE__
   EXPECT_EQ(0, sigaction(SIGBUS, &sigact, 0));
 #endif
-  char *c = (char*)0x123;
-  EXPECT_DEATH(*c = 0, kSEGVCrash);
+  EXPECT_DEATH(*c = 0, kOverriddenSigactionHandler);
+
   // ... and signal().
-  EXPECT_EQ(0, signal(SIGSEGV, my_signal_sighandler));
-  EXPECT_DEATH(*c = 0, kSEGVCrash);
+  EXPECT_NE(SIG_ERR, signal(SIGSEGV, my_signal_sighandler));
+  EXPECT_DEATH(*c = 0, kOverriddenSignalHandler);
 }
 }  // namespace
 #endif
@@ -337,8 +346,9 @@
   return 0;
 }
 
-#if !defined(__aarch64__)
+#if !defined(__aarch64__) && !defined(__powerpc64__)
 // FIXME: Infinite loop in AArch64 (PR24389).
+// FIXME: Also occasional hang on powerpc.  Maybe same problem as on AArch64?
 TEST(AddressSanitizer, ManyThreadsTest) {
   const size_t kNumThreads =
       (SANITIZER_WORDSIZE == 32 || ASAN_AVOID_EXPENSIVE_TESTS) ? 30 : 1000;
@@ -684,6 +694,7 @@
   return 0;
 }
 
+#if !defined(__thumb__)
 TEST(AddressSanitizer, ThreadStackReuseTest) {
   pthread_t t;
   PTHREAD_CREATE(&t, 0, ThreadStackReuseFunc1, 0);
@@ -691,6 +702,7 @@
   PTHREAD_CREATE(&t, 0, ThreadStackReuseFunc2, 0);
   PTHREAD_JOIN(t, 0);
 }
+#endif
 
 #if defined(__SSE2__)
 #include <emmintrin.h>
@@ -945,7 +957,7 @@
   char *addr = (char*)0x0000100000080000;
 # endif
 #endif
-  EXPECT_DEATH(*addr = 1, "AddressSanitizer: SEGV on unknown");
+  EXPECT_DEATH(*addr = 1, "AddressSanitizer: (SEGV|BUS) on unknown");
 }
 #endif  // ASAN_NEEDS_SEGV
 
@@ -1090,6 +1102,11 @@
   }
 }
 
+// pthread_exit tries to perform unwinding stuff that leads to dlopen'ing
+// libgcc_s.so. dlopen in its turn calls malloc to store "libgcc_s.so" string
+// that confuses LSan on Thumb because it fails to understand that this
+// allocation happens in dynamic linker and should be ignored.
+#if !defined(__thumb__)
 static void *PthreadExit(void *a) {
   pthread_exit(0);
   return 0;
@@ -1102,6 +1119,7 @@
     PTHREAD_JOIN(t, 0);
   }
 }
+#endif
 
 // FIXME: Why does clang-cl define __EXCEPTIONS?
 #if defined(__EXCEPTIONS) && !defined(_WIN32)
diff --git a/lib/asan/tests/asan_test_config.h b/lib/asan/tests/asan_test_config.h
index 92f2763..8493f41 100644
--- a/lib/asan/tests/asan_test_config.h
+++ b/lib/asan/tests/asan_test_config.h
@@ -17,13 +17,9 @@
 #ifndef ASAN_TEST_CONFIG_H
 #define ASAN_TEST_CONFIG_H
 
-#include <vector>
 #include <string>
-#include <map>
 
 using std::string;
-using std::vector;
-using std::map;
 
 #ifndef ASAN_UAR
 # error "please define ASAN_UAR"
diff --git a/lib/asan/tests/asan_test_main.cc b/lib/asan/tests/asan_test_main.cc
index 1071d44..0c1b93c 100644
--- a/lib/asan/tests/asan_test_main.cc
+++ b/lib/asan/tests/asan_test_main.cc
@@ -13,15 +13,23 @@
 #include "asan_test_utils.h"
 #include "sanitizer_common/sanitizer_platform.h"
 
-// Default ASAN_OPTIONS for the unit tests. Let's turn symbolication off to
-// speed up testing (unit tests don't use it anyway).
+// Default ASAN_OPTIONS for the unit tests.
 extern "C" const char* __asan_default_options() {
 #if SANITIZER_MAC
   // On Darwin, we default to `abort_on_error=1`, which would make tests run
-  // much slower. Let's override this and run lit tests with 'abort_on_error=0'.
-  // Also, make sure we do not overwhelm the syslog while testing.
+  // much slower. Let's override this and run lit tests with 'abort_on_error=0'
+  // and make sure we do not overwhelm the syslog while testing. Also, let's
+  // turn symbolization off to speed up testing, especially when not running
+  // with llvm-symbolizer but with atos.
   return "symbolize=false:abort_on_error=0:log_to_syslog=0";
+#elif SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
+  // On PowerPC and ARM Thumb, a couple tests involving pthread_exit fail due to
+  // leaks detected by LSan. Symbolized leak report is required to apply a
+  // suppression for this known problem.
+  return "";
 #else
+  // Let's turn symbolization off to speed up testing (more than 3 times speedup
+  // observed).
   return "symbolize=false";
 #endif
 }
diff --git a/lib/asan/tests/asan_test_utils.h b/lib/asan/tests/asan_test_utils.h
index f16d939..c292467 100644
--- a/lib/asan/tests/asan_test_utils.h
+++ b/lib/asan/tests/asan_test_utils.h
@@ -30,11 +30,11 @@
 #include <stdint.h>
 #include <assert.h>
 #include <algorithm>
+#include <setjmp.h>
 
 #if !defined(_WIN32)
 # include <strings.h>
 # include <sys/mman.h>
-# include <setjmp.h>
 #endif
 
 #ifdef __linux__
diff --git a/lib/asan/weak_symbols.txt b/lib/asan/weak_symbols.txt
index ba7b027..fe680f8 100644
--- a/lib/asan/weak_symbols.txt
+++ b/lib/asan/weak_symbols.txt
@@ -1,3 +1,12 @@
 ___asan_default_options
 ___asan_default_suppressions
 ___asan_on_error
+___asan_set_shadow_00
+___asan_set_shadow_f1
+___asan_set_shadow_f2
+___asan_set_shadow_f3
+___asan_set_shadow_f4
+___asan_set_shadow_f5
+___asan_set_shadow_f6
+___asan_set_shadow_f7
+___asan_set_shadow_f8
diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt
index 8ba3a4e..f0d3f50 100644
--- a/lib/builtins/CMakeLists.txt
+++ b/lib/builtins/CMakeLists.txt
@@ -42,7 +42,8 @@
   ashlti3.c
   ashrdi3.c
   ashrti3.c
-  clear_cache.c
+  bswapdi2.c
+  bswapsi2.c
   clzdi2.c
   clzsi2.c
   clzti2.c
@@ -66,11 +67,10 @@
   divti3.c
   divtf3.c
   divxc3.c
-  enable_execute_stack.c
-  eprintf.c
   extendsfdf2.c
   extendhfsf2.c
   ffsdi2.c
+  ffssi2.c
   ffsti2.c
   fixdfdi.c
   fixdfsi.c
@@ -165,25 +165,44 @@
   umodsi3.c
   umodti3.c)
 
+set(GENERIC_TF_SOURCES
+  comparetf2.c
+  extenddftf2.c
+  extendsftf2.c
+  fixtfdi.c
+  fixtfsi.c
+  fixtfti.c
+  fixunstfdi.c
+  fixunstfsi.c
+  fixunstfti.c
+  floatditf.c
+  floatsitf.c
+  floattitf.c
+  floatunditf.c
+  floatunsitf.c
+  floatuntitf.c
+  multc3.c
+  trunctfdf2.c
+  trunctfsf2.c)
+
 option(COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN
   "Skip the atomic builtin (this may be needed if system headers are unavailable)"
   Off)
 
+if(NOT FUCHSIA AND NOT COMPILER_RT_BAREMETAL_BUILD)
+  set(GENERIC_SOURCES
+    ${GENERIC_SOURCES}
+    emutls.c 
+    enable_execute_stack.c
+    eprintf.c)
+endif()
+
 if(COMPILER_RT_HAS_ATOMIC_KEYWORD AND NOT COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN)
   set(GENERIC_SOURCES
     ${GENERIC_SOURCES}
     atomic.c)
 endif()
 
-set(MSVC_SOURCES
- divsc3.c
- divdc3.c
- divxc3.c
- mulsc3.c
- muldc3.c
- mulxc3.c)
-
-
 if(APPLE)
   set(GENERIC_SOURCES
     ${GENERIC_SOURCES}
@@ -195,18 +214,18 @@
     atomic_thread_fence.c)
 endif()
 
-if(NOT WIN32 OR MINGW)
-  set(GENERIC_SOURCES
-      ${GENERIC_SOURCES}
-      emutls.c)
-endif()
-
 if (HAVE_UNWIND_H)
   set(GENERIC_SOURCES
       ${GENERIC_SOURCES}
       gcc_personality_v0.c)
 endif ()
 
+if (NOT FUCHSIA)
+  set(GENERIC_SOURCES
+    ${GENERIC_SOURCES}
+    clear_cache.c)
+endif()
+
 if (NOT MSVC)
   set(x86_64_SOURCES
       x86_64/chkstk.S
@@ -263,9 +282,9 @@
       x86_64/floatdidf.c
       x86_64/floatdisf.c
       x86_64/floatdixf.c
-      ${MSVC_SOURCES})
+      ${GENERIC_SOURCES})
   set(x86_64h_SOURCES ${x86_64_SOURCES})
-  set(i386_SOURCES ${MSVC_SOURCES})
+  set(i386_SOURCES ${GENERIC_SOURCES})
   set(i686_SOURCES ${i386_SOURCES})
 endif () # if (NOT MSVC)
 
@@ -303,6 +322,13 @@
   arm/umodsi3.S
   ${GENERIC_SOURCES})
 
+set(thumb1_SOURCES
+  arm/divsi3.S
+  arm/udivsi3.S
+  arm/comparesf2.S
+  arm/addsf3.S
+  ${GENERIC_SOURCES})
+
 set(arm_EABI_SOURCES
   arm/aeabi_cdcmp.S
   arm/aeabi_cdcmpeq_check_nan.c
@@ -321,6 +347,7 @@
   arm/aeabi_memset.S
   arm/aeabi_uidivmod.S
   arm/aeabi_uldivmod.S)
+
 set(arm_Thumb1_JT_SOURCES
   arm/switch16.S
   arm/switch32.S
@@ -395,34 +422,22 @@
       udivmoddi4.c
       udivmodsi4.c
       udivsi3.c
-      umoddi3.c)
+      umoddi3.c
+      emutls.c)
 elseif(NOT WIN32)
   # TODO the EABI sources should only be added to EABI targets
   set(arm_SOURCES
     ${arm_SOURCES}
     ${arm_EABI_SOURCES}
     ${arm_Thumb1_SOURCES})
+
+  set(thumb1_SOURCES
+    ${thumb1_SOURCES}
+    ${arm_EABI_SOURCES})
 endif()
 
 set(aarch64_SOURCES
-  comparetf2.c
-  extenddftf2.c
-  extendsftf2.c
-  fixtfdi.c
-  fixtfsi.c
-  fixtfti.c
-  fixunstfdi.c
-  fixunstfsi.c
-  fixunstfti.c
-  floatditf.c
-  floatsitf.c
-  floattitf.c
-  floatunditf.c
-  floatunsitf.c
-  floatuntitf.c
-  multc3.c
-  trunctfdf2.c
-  trunctfsf2.c
+  ${GENERIC_TF_SOURCES}
   ${GENERIC_SOURCES})
 
 set(armhf_SOURCES ${arm_SOURCES})
@@ -432,14 +447,16 @@
 set(arm64_SOURCES ${aarch64_SOURCES})
 
 # macho_embedded archs
-set(armv6m_SOURCES ${GENERIC_SOURCES})
+set(armv6m_SOURCES ${thumb1_SOURCES})
 set(armv7m_SOURCES ${arm_SOURCES})
 set(armv7em_SOURCES ${arm_SOURCES})
 
 set(mips_SOURCES ${GENERIC_SOURCES})
 set(mipsel_SOURCES ${mips_SOURCES})
-set(mips64_SOURCES ${mips_SOURCES})
-set(mips64el_SOURCES ${mips_SOURCES})
+set(mips64_SOURCES ${GENERIC_TF_SOURCES}
+                   ${mips_SOURCES})
+set(mips64el_SOURCES ${GENERIC_TF_SOURCES}
+                     ${mips_SOURCES})
 
 set(wasm32_SOURCES ${GENERIC_SOURCES})
 set(wasm64_SOURCES ${GENERIC_SOURCES})
@@ -473,11 +490,18 @@
 
   foreach (arch ${BUILTIN_SUPPORTED_ARCH})
     if (CAN_TARGET_${arch})
+      # NOTE: some architectures (e.g. i386) have multiple names.  Ensure that
+      # we catch them all.
+      set(_arch ${arch})
+      if("${arch}" STREQUAL "i686")
+        set(_arch "i386|i686")
+      endif()
+
       # Filter out generic versions of routines that are re-implemented in
       # architecture specific manner.  This prevents multiple definitions of the
       # same symbols, making the symbol selection non-deterministic.
       foreach (_file ${${arch}_SOURCES})
-        if (${_file} MATCHES ${arch}/*)
+        if (${_file} MATCHES ${_arch}/*)
           get_filename_component(_name ${_file} NAME)
           string(REPLACE ".S" ".c" _cname "${_name}")
           list(REMOVE_ITEM ${arch}_SOURCES ${_cname})
@@ -487,7 +511,7 @@
       # Needed for clear_cache on debug mode, due to r7's usage in inline asm.
       # Release mode already sets it via -O2/3, Debug mode doesn't.
       if (${arch} STREQUAL "armhf")
-        list(APPEND BUILTIN_CFLAGS -fomit-frame-pointer)
+        list(APPEND BUILTIN_CFLAGS -fomit-frame-pointer -DCOMPILER_RT_ARMHF_TARGET)
       endif()
 
       add_compiler_rt_runtime(clang_rt.builtins
diff --git a/lib/builtins/README.txt b/lib/builtins/README.txt
index ad36e4e..e603dfa 100644
--- a/lib/builtins/README.txt
+++ b/lib/builtins/README.txt
@@ -45,6 +45,7 @@
 si_int __ctzdi2(di_int a);  // count trailing zeros
 si_int __ctzti2(ti_int a);  // count trailing zeros
 
+si_int __ffssi2(si_int a);  // find least significant 1 bit
 si_int __ffsdi2(di_int a);  // find least significant 1 bit
 si_int __ffsti2(ti_int a);  // find least significant 1 bit
 
@@ -56,8 +57,8 @@
 si_int __popcountdi2(di_int a);  // bit population
 si_int __popcountti2(ti_int a);  // bit population
 
-uint32_t __bswapsi2(uint32_t a);   // a byteswapped, arm only
-uint64_t __bswapdi2(uint64_t a);   // a byteswapped, arm only
+uint32_t __bswapsi2(uint32_t a);   // a byteswapped
+uint64_t __bswapdi2(uint64_t a);   // a byteswapped
 
 // Integral arithmetic
 
diff --git a/lib/builtins/adddf3.c b/lib/builtins/adddf3.c
index 8b7aae0..c528e9e 100644
--- a/lib/builtins/adddf3.c
+++ b/lib/builtins/adddf3.c
@@ -15,8 +15,13 @@
 #define DOUBLE_PRECISION
 #include "fp_add_impl.inc"
 
-ARM_EABI_FNALIAS(dadd, adddf3)
-
 COMPILER_RT_ABI double __adddf3(double a, double b){
     return __addXf3__(a, b);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI double __aeabi_dadd(double a, double b) {
+  return __adddf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/addsf3.c b/lib/builtins/addsf3.c
index 0f5d6ea..fe57068 100644
--- a/lib/builtins/addsf3.c
+++ b/lib/builtins/addsf3.c
@@ -15,8 +15,13 @@
 #define SINGLE_PRECISION
 #include "fp_add_impl.inc"
 
-ARM_EABI_FNALIAS(fadd, addsf3)
-
 COMPILER_RT_ABI float __addsf3(float a, float b) {
     return __addXf3__(a, b);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI float __aeabi_fadd(float a, float b) {
+  return __addsf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/arm/addsf3.S b/lib/builtins/arm/addsf3.S
new file mode 100644
index 0000000..362b5c1
--- /dev/null
+++ b/lib/builtins/arm/addsf3.S
@@ -0,0 +1,277 @@
+/*===-- addsf3.S - Adds two single precision floating pointer numbers-----===//
+ *
+ *                     The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ *===----------------------------------------------------------------------===//
+ *
+ * This file implements the __addsf3 (single precision floating pointer number
+ * addition with the IEEE-754 default rounding (to nearest, ties to even)
+ * function for the ARM Thumb1 ISA.
+ *
+ *===----------------------------------------------------------------------===*/
+
+#include "../assembly.h"
+#define significandBits 23
+#define typeWidth 32
+
+	.syntax unified
+	.text
+  .thumb
+  .p2align 2
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_fadd, __addsf3)
+
+DEFINE_COMPILERRT_THUMB_FUNCTION(__addsf3)
+  push {r4, r5, r6, r7, lr}
+  // Get the absolute value of a and b.
+  lsls r2, r0, #1
+  lsls r3, r1, #1
+  lsrs r2, r2, #1  /* aAbs */
+  beq  LOCAL_LABEL(a_zero_nan_inf)
+  lsrs r3, r3, #1  /* bAbs */
+  beq  LOCAL_LABEL(zero_nan_inf)
+
+  // Detect if a or b is infinity or Nan.
+  lsrs r6, r2, #(significandBits)
+  lsrs r7, r3, #(significandBits)
+  cmp  r6, #0xFF
+  beq  LOCAL_LABEL(zero_nan_inf)
+  cmp  r7, #0xFF
+  beq  LOCAL_LABEL(zero_nan_inf)
+
+  // Swap Rep and Abs so that a and aAbs has the larger absolute value.
+  cmp r2, r3
+  bhs LOCAL_LABEL(no_swap)
+  movs r4, r0
+  movs r5, r2
+  movs r0, r1
+  movs r2, r3
+  movs r1, r4
+  movs r3, r5
+LOCAL_LABEL(no_swap):
+
+  // Get the significands and shift them to give us round, guard and sticky.
+  lsls r4, r0, #(typeWidth - significandBits)
+  lsrs r4, r4, #(typeWidth - significandBits - 3) /* aSignificand << 3 */
+  lsls r5, r1, #(typeWidth - significandBits)
+  lsrs r5, r5, #(typeWidth - significandBits - 3) /* bSignificand << 3 */
+
+  // Get the implicitBit.
+  movs r6, #1
+  lsls r6, r6, #(significandBits + 3)
+
+  // Get aExponent and set implicit bit if necessary.
+  lsrs r2, r2, #(significandBits)
+  beq LOCAL_LABEL(a_done_implicit_bit)
+  orrs r4, r6
+LOCAL_LABEL(a_done_implicit_bit):
+
+  // Get bExponent and set implicit bit if necessary.
+  lsrs r3, r3, #(significandBits)
+  beq LOCAL_LABEL(b_done_implicit_bit)
+  orrs r5, r6
+LOCAL_LABEL(b_done_implicit_bit):
+
+  // Get the difference in exponents.
+  subs r6, r2, r3
+  beq LOCAL_LABEL(done_align)
+
+  // If b is denormal, then a must be normal as align > 0, and we only need to
+  // right shift bSignificand by (align - 1) bits.
+  cmp  r3, #0
+  bne  1f
+  subs r6, r6, #1
+1:
+
+  // No longer needs bExponent. r3 is dead here.
+  // Set sticky bits of b: sticky = bSignificand << (typeWidth - align).
+  movs r3, #(typeWidth)
+  subs r3, r3, r6
+  movs r7, r5
+  lsls r7, r3
+  beq 1f
+  movs r7, #1
+1:
+
+  // bSignificand = bSignificand >> align | sticky;
+  lsrs r5, r6
+  orrs r5, r7
+  bne LOCAL_LABEL(done_align)
+  movs r5, #1 //  sticky; b is known to be non-zero.
+
+LOCAL_LABEL(done_align):
+  // isSubtraction = (aRep ^ bRep) >> 31;
+  movs r7, r0
+  eors r7, r1
+  lsrs r7, #31
+  bne LOCAL_LABEL(do_substraction)
+
+  // Same sign, do Addition.
+
+  // aSignificand += bSignificand;
+  adds r4, r4, r5
+
+  // Check carry bit.
+  movs r6, #1
+  lsls r6, r6, #(significandBits + 3 + 1)
+  movs r7, r4
+  ands r7, r6
+  beq LOCAL_LABEL(form_result)
+  // If the addition carried up, we need to right-shift the result and
+  // adjust the exponent.
+  movs r7, r4
+  movs r6, #1
+  ands r7, r6 // sticky = aSignificand & 1;
+  lsrs r4, #1
+  orrs r4, r7  // result Significand
+  adds r2, #1  // result Exponent
+  // If we have overflowed the type, return +/- infinity.
+  cmp  r2, 0xFF
+  beq  LOCAL_LABEL(ret_inf)
+
+LOCAL_LABEL(form_result):
+  // Shift the sign, exponent and significand into place.
+  lsrs r0, #(typeWidth - 1)
+  lsls r0, #(typeWidth - 1) // Get Sign.
+  lsls r2, #(significandBits)
+  orrs r0, r2
+  movs r1, r4
+  lsls r4, #(typeWidth - significandBits - 3)
+  lsrs r4, #(typeWidth - significandBits)
+  orrs r0, r4
+
+  // Final rounding.  The result may overflow to infinity, but that is the
+  // correct result in that case.
+  // roundGuardSticky = aSignificand & 0x7;
+  movs r2, #0x7
+  ands r1, r2
+  // if (roundGuardSticky > 0x4) result++;
+
+  cmp r1, #0x4
+  blt LOCAL_LABEL(done_round)
+  beq 1f
+  adds r0, #1
+  pop {r4, r5, r6, r7, pc}
+1:
+
+  // if (roundGuardSticky == 0x4) result += result & 1;
+  movs r1, r0
+  lsrs r1, #1
+  bcc  LOCAL_LABEL(done_round)
+  adds r0, r0, #1
+LOCAL_LABEL(done_round):
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(do_substraction):
+  subs r4, r4, r5 // aSignificand -= bSignificand;
+  beq  LOCAL_LABEL(ret_zero)
+  movs r6, r4
+  cmp  r2, 0
+  beq  LOCAL_LABEL(form_result) // if a's exp is 0, no need to normalize.
+  // If partial cancellation occured, we need to left-shift the result
+  // and adjust the exponent:
+  lsrs r6, r6, #(significandBits + 3)
+  bne LOCAL_LABEL(form_result)
+
+  push {r0, r1, r2, r3}
+  movs r0, r4
+  bl   __clzsi2
+  movs r5, r0
+  pop {r0, r1, r2, r3}
+  // shift = rep_clz(aSignificand) - rep_clz(implicitBit << 3);
+  subs r5, r5, #(typeWidth - significandBits - 3 - 1)
+  // aSignificand <<= shift; aExponent -= shift;
+  lsls r4, r5
+  subs  r2, r2, r5
+  bgt LOCAL_LABEL(form_result)
+
+  // Do normalization if aExponent <= 0.
+  movs r6, #1
+  subs r6, r6, r2 // 1 - aExponent;
+  movs r2, #0 // aExponent = 0;
+  movs r3, #(typeWidth) // bExponent is dead.
+  subs r3, r3, r6
+  movs r7, r4
+  lsls r7, r3  // stickyBit = (bool)(aSignificant << (typeWidth - align))
+  beq 1f
+  movs r7, #1
+1:
+  lsrs r4, r6 /* aSignificand >> shift */
+  orrs r4, r7
+  b LOCAL_LABEL(form_result)
+
+LOCAL_LABEL(ret_zero):
+  movs r0, #0
+  pop {r4, r5, r6, r7, pc}
+
+
+LOCAL_LABEL(a_zero_nan_inf):
+  lsrs r3, r3, #1
+
+LOCAL_LABEL(zero_nan_inf):
+  // Here  r2 has aAbs, r3 has bAbs
+  movs r4, #0xFF
+  lsls r4, r4, #(significandBits) // Make +inf.
+
+  cmp r2, r4
+  bhi LOCAL_LABEL(a_is_nan)
+  cmp r3, r4
+  bhi LOCAL_LABEL(b_is_nan)
+
+  cmp r2, r4
+  bne LOCAL_LABEL(a_is_rational)
+  // aAbs is INF.
+  eors r1, r0 // aRep ^ bRep.
+  movs r6, #1
+  lsls r6, r6, #(typeWidth - 1) // get sign mask.
+  cmp r1, r6 // if they only differ on sign bit, it's -INF + INF
+  beq LOCAL_LABEL(a_is_nan)
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(a_is_rational):
+  cmp r3, r4
+  bne LOCAL_LABEL(b_is_rational)
+  movs r0, r1
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(b_is_rational):
+  // either a or b or both are zero.
+  adds r4, r2, r3
+  beq  LOCAL_LABEL(both_zero)
+  cmp r2, #0 // is absA 0 ?
+  beq LOCAL_LABEL(ret_b)
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(both_zero):
+  ands r0, r1 // +0 + -0 = +0
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(ret_b):
+  movs r0, r1
+
+LOCAL_LABEL(ret):
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(b_is_nan):
+  movs r0, r1
+LOCAL_LABEL(a_is_nan):
+  movs r1, #1
+  lsls r1, r1, #(significandBits -1) // r1 is quiet bit.
+  orrs r0, r1
+  pop {r4, r5, r6, r7, pc}
+
+LOCAL_LABEL(ret_inf):
+  movs r4, #0xFF
+  lsls r4, r4, #(significandBits)
+  orrs r0, r4
+  lsrs r0, r0, #(significandBits)
+  lsls r0, r0, #(significandBits)
+  pop {r4, r5, r6, r7, pc}
+
+
+END_COMPILERRT_FUNCTION(__addsf3)
+
+NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/builtins/arm/aeabi_cdcmp.S b/lib/builtins/arm/aeabi_cdcmp.S
index 8008f5f..3e7a8b8 100644
--- a/lib/builtins/arm/aeabi_cdcmp.S
+++ b/lib/builtins/arm/aeabi_cdcmp.S
@@ -30,13 +30,32 @@
         push {r0-r3, lr}
         bl __aeabi_cdcmpeq_check_nan
         cmp r0, #1
+#if __ARM_ARCH_ISA_THUMB == 1
+        beq 1f
+        // NaN has been ruled out, so __aeabi_cdcmple can't trap
+        mov r0, sp
+        ldm r0, {r0-r3}
+        bl __aeabi_cdcmple
+        pop {r0-r3, pc}
+1:
+        // Z = 0, C = 1
+        movs r0, #0xF
+        lsls r0, r0, #31
+        pop {r0-r3, pc}
+#else
         pop {r0-r3, lr}
 
         // NaN has been ruled out, so __aeabi_cdcmple can't trap
         bne __aeabi_cdcmple
 
+#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
+        mov ip, #APSR_C
+        msr APSR_nzcvq, ip
+#else
         msr CPSR_f, #APSR_C
+#endif
         JMP(lr)
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
 
 
@@ -59,19 +78,48 @@
 
         bl __aeabi_dcmplt
         cmp r0, #1
+#if __ARM_ARCH_ISA_THUMB == 1
+        bne 1f
+        // Z = 0, C = 0
+        movs r0, #1
+        lsls r0, r0, #1
+        pop {r0-r3, pc}
+1:
+        mov r0, sp
+        ldm r0, {r0-r3}
+        bl __aeabi_dcmpeq
+        cmp r0, #1
+        bne 2f
+        // Z = 1, C = 1
+        movs r0, #2
+        lsls r0, r0, #31
+        pop {r0-r3, pc}
+2:
+        // Z = 0, C = 1
+        movs r0, #0xF
+        lsls r0, r0, #31
+        pop {r0-r3, pc}
+#else
+        ITT(eq)
         moveq ip, #0
         beq 1f
 
         ldm sp, {r0-r3}
         bl __aeabi_dcmpeq
         cmp r0, #1
+        ITE(eq)
         moveq ip, #(APSR_C | APSR_Z)
         movne ip, #(APSR_C)
 
 1:
+#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
+        msr APSR_nzcvq, ip
+#else
         msr CPSR_f, ip
+#endif
         pop {r0-r3}
         POP_PC()
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_cdcmple)
 
 // int __aeabi_cdrcmple(double a, double b) {
diff --git a/lib/builtins/arm/aeabi_cdcmpeq_check_nan.c b/lib/builtins/arm/aeabi_cdcmpeq_check_nan.c
index 577f6b2..7578433 100644
--- a/lib/builtins/arm/aeabi_cdcmpeq_check_nan.c
+++ b/lib/builtins/arm/aeabi_cdcmpeq_check_nan.c
@@ -8,9 +8,9 @@
 //===----------------------------------------------------------------------===//
 
 #include <stdint.h>
+#include "../int_lib.h"
 
-__attribute__((pcs("aapcs")))
-__attribute__((visibility("hidden")))
+AEABI_RTABI __attribute__((visibility("hidden")))
 int __aeabi_cdcmpeq_check_nan(double a, double b) {
     return __builtin_isnan(a) || __builtin_isnan(b);
 }
diff --git a/lib/builtins/arm/aeabi_cfcmp.S b/lib/builtins/arm/aeabi_cfcmp.S
index 274baf7..1f304ff 100644
--- a/lib/builtins/arm/aeabi_cfcmp.S
+++ b/lib/builtins/arm/aeabi_cfcmp.S
@@ -30,13 +30,32 @@
         push {r0-r3, lr}
         bl __aeabi_cfcmpeq_check_nan
         cmp r0, #1
+#if __ARM_ARCH_ISA_THUMB == 1
+        beq 1f
+        // NaN has been ruled out, so __aeabi_cfcmple can't trap
+        mov r0, sp
+        ldm r0, {r0-r3}
+        bl __aeabi_cfcmple
+        pop {r0-r3, pc}
+1:
+        // Z = 0, C = 1
+        movs r0, #0xF
+        lsls r0, r0, #31
+        pop {r0-r3, pc}
+#else
         pop {r0-r3, lr}
 
         // NaN has been ruled out, so __aeabi_cfcmple can't trap
         bne __aeabi_cfcmple
 
+#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
+        mov ip, #APSR_C
+        msr APSR_nzcvq, ip
+#else
         msr CPSR_f, #APSR_C
+#endif
         JMP(lr)
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
 
 
@@ -59,19 +78,48 @@
 
         bl __aeabi_fcmplt
         cmp r0, #1
+#if __ARM_ARCH_ISA_THUMB == 1
+        bne 1f
+        // Z = 0, C = 0
+        movs r0, #1
+        lsls r0, r0, #1
+        pop {r0-r3, pc}
+1:
+        mov r0, sp
+        ldm r0, {r0-r3}
+        bl __aeabi_fcmpeq
+        cmp r0, #1
+        bne 2f
+        // Z = 1, C = 1
+        movs r0, #2
+        lsls r0, r0, #31
+        pop {r0-r3, pc}
+2:
+        // Z = 0, C = 1
+        movs r0, #0xF
+        lsls r0, r0, #31
+        pop {r0-r3, pc}
+#else
+        ITT(eq)
         moveq ip, #0
         beq 1f
 
         ldm sp, {r0-r3}
         bl __aeabi_fcmpeq
         cmp r0, #1
+        ITE(eq)
         moveq ip, #(APSR_C | APSR_Z)
         movne ip, #(APSR_C)
 
 1:
+#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
+        msr APSR_nzcvq, ip
+#else
         msr CPSR_f, ip
+#endif
         pop {r0-r3}
         POP_PC()
+#endif
 END_COMPILERRT_FUNCTION(__aeabi_cfcmple)
 
 // int __aeabi_cfrcmple(float a, float b) {
diff --git a/lib/builtins/arm/aeabi_cfcmpeq_check_nan.c b/lib/builtins/arm/aeabi_cfcmpeq_check_nan.c
index 992e31f..43dde9a 100644
--- a/lib/builtins/arm/aeabi_cfcmpeq_check_nan.c
+++ b/lib/builtins/arm/aeabi_cfcmpeq_check_nan.c
@@ -8,9 +8,9 @@
 //===----------------------------------------------------------------------===//
 
 #include <stdint.h>
+#include "../int_lib.h"
 
-__attribute__((pcs("aapcs")))
-__attribute__((visibility("hidden")))
+AEABI_RTABI __attribute__((visibility("hidden")))
 int __aeabi_cfcmpeq_check_nan(float a, float b) {
     return __builtin_isnan(a) || __builtin_isnan(b);
 }
diff --git a/lib/builtins/arm/aeabi_dcmp.S b/lib/builtins/arm/aeabi_dcmp.S
index 43e4392..51539c0 100644
--- a/lib/builtins/arm/aeabi_dcmp.S
+++ b/lib/builtins/arm/aeabi_dcmp.S
@@ -26,10 +26,10 @@
         bl        SYMBOL_NAME(__ ## cond ## df2) SEPARATOR \
         cmp       r0, #0                         SEPARATOR \
         b ## cond 1f                             SEPARATOR \
-        mov       r0, #0                         SEPARATOR \
+        movs      r0, #0                         SEPARATOR \
         pop       { r4, pc }                     SEPARATOR \
 1:                                               SEPARATOR \
-        mov       r0, #1                         SEPARATOR \
+        movs      r0, #1                         SEPARATOR \
         pop       { r4, pc }                     SEPARATOR \
 END_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond)
 
diff --git a/lib/builtins/arm/aeabi_div0.c b/lib/builtins/arm/aeabi_div0.c
index ccc95fa..dc30313 100644
--- a/lib/builtins/arm/aeabi_div0.c
+++ b/lib/builtins/arm/aeabi_div0.c
@@ -26,16 +26,18 @@
  * line.
  */
 
+#include "../int_lib.h"
+
 /* provide an unused declaration to pacify pendantic compilation */
 extern unsigned char declaration;
 
 #if defined(__ARM_EABI__)
-int __attribute__((weak)) __attribute__((visibility("hidden")))
+AEABI_RTABI int __attribute__((weak)) __attribute__((visibility("hidden")))
 __aeabi_idiv0(int return_value) {
   return return_value;
 }
 
-long long __attribute__((weak)) __attribute__((visibility("hidden")))
+AEABI_RTABI long long __attribute__((weak)) __attribute__((visibility("hidden")))
 __aeabi_ldiv0(long long return_value) {
   return return_value;
 }
diff --git a/lib/builtins/arm/aeabi_drsub.c b/lib/builtins/arm/aeabi_drsub.c
index fc17d5a..1254886 100644
--- a/lib/builtins/arm/aeabi_drsub.c
+++ b/lib/builtins/arm/aeabi_drsub.c
@@ -10,10 +10,10 @@
 #define DOUBLE_PRECISION
 #include "../fp_lib.h"
 
-COMPILER_RT_ABI fp_t
+AEABI_RTABI fp_t
 __aeabi_dsub(fp_t, fp_t);
 
-COMPILER_RT_ABI fp_t
+AEABI_RTABI fp_t
 __aeabi_drsub(fp_t a, fp_t b) {
     return __aeabi_dsub(b, a);
 }
diff --git a/lib/builtins/arm/aeabi_frsub.c b/lib/builtins/arm/aeabi_frsub.c
index 64258dc..34f2303 100644
--- a/lib/builtins/arm/aeabi_frsub.c
+++ b/lib/builtins/arm/aeabi_frsub.c
@@ -10,10 +10,10 @@
 #define SINGLE_PRECISION
 #include "../fp_lib.h"
 
-COMPILER_RT_ABI fp_t
+AEABI_RTABI fp_t
 __aeabi_fsub(fp_t, fp_t);
 
-COMPILER_RT_ABI fp_t
+AEABI_RTABI fp_t
 __aeabi_frsub(fp_t a, fp_t b) {
     return __aeabi_fsub(b, a);
 }
diff --git a/lib/builtins/arm/aeabi_idivmod.S b/lib/builtins/arm/aeabi_idivmod.S
index b43ea69..0164b15 100644
--- a/lib/builtins/arm/aeabi_idivmod.S
+++ b/lib/builtins/arm/aeabi_idivmod.S
@@ -26,7 +26,7 @@
         push    {r0, r1, lr}
         bl      SYMBOL_NAME(__divsi3)
         pop     {r1, r2, r3} // now r0 = quot, r1 = num, r2 = denom
-        muls    r2, r2, r0   // r2 = quot * denom
+        muls    r2, r0, r2   // r2 = quot * denom
         subs    r1, r1, r2
         JMP     (r3)
 #else
diff --git a/lib/builtins/arm/aeabi_ldivmod.S b/lib/builtins/arm/aeabi_ldivmod.S
index 3dae14e..038ae5d 100644
--- a/lib/builtins/arm/aeabi_ldivmod.S
+++ b/lib/builtins/arm/aeabi_ldivmod.S
@@ -23,23 +23,23 @@
         .syntax unified
         .p2align 2
 DEFINE_COMPILERRT_FUNCTION(__aeabi_ldivmod)
-        push    {r11, lr}
+        push    {r6, lr}
         sub     sp, sp, #16
-        add     r12, sp, #8
-        str     r12, [sp]
+        add     r6, sp, #8
+        str     r6, [sp]
 #if defined(__MINGW32__)
-        mov     r12, r0
-        mov     r0, r2
-        mov     r2, r12
-        mov     r12, r1
-        mov     r1, r3
-        mov     r3, r12
+        movs    r6, r0
+        movs    r0, r2
+        movs    r2, r6
+        movs    r6, r1
+        movs    r1, r3
+        movs    r3, r6
 #endif
         bl      SYMBOL_NAME(__divmoddi4)
         ldr     r2, [sp, #8]
         ldr     r3, [sp, #12]
         add     sp, sp, #16
-        pop     {r11, pc}
+        pop     {r6, pc}
 END_COMPILERRT_FUNCTION(__aeabi_ldivmod)
 
 NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/builtins/arm/aeabi_memset.S b/lib/builtins/arm/aeabi_memset.S
index 48edd89..633f592 100644
--- a/lib/builtins/arm/aeabi_memset.S
+++ b/lib/builtins/arm/aeabi_memset.S
@@ -26,7 +26,7 @@
 
 DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)
         mov     r2, r1
-        mov     r1, #0
+        movs    r1, #0
         b       memset
 END_COMPILERRT_FUNCTION(__aeabi_memclr)
 
diff --git a/lib/builtins/arm/aeabi_uidivmod.S b/lib/builtins/arm/aeabi_uidivmod.S
index 7098bc6..a627fc7 100644
--- a/lib/builtins/arm/aeabi_uidivmod.S
+++ b/lib/builtins/arm/aeabi_uidivmod.S
@@ -29,7 +29,7 @@
         push    {r0, r1, lr}
         bl      SYMBOL_NAME(__aeabi_uidiv)
         pop     {r1, r2, r3}
-        muls    r2, r2, r0 // r2 = quot * denom
+        muls    r2, r0, r2 // r2 = quot * denom
         subs    r1, r1, r2
         JMP     (r3)
 LOCAL_LABEL(case_denom_larger):
diff --git a/lib/builtins/arm/aeabi_uldivmod.S b/lib/builtins/arm/aeabi_uldivmod.S
index bc26e56..be343b6 100644
--- a/lib/builtins/arm/aeabi_uldivmod.S
+++ b/lib/builtins/arm/aeabi_uldivmod.S
@@ -23,23 +23,23 @@
         .syntax unified
         .p2align 2
 DEFINE_COMPILERRT_FUNCTION(__aeabi_uldivmod)
-        push	{r11, lr}
+        push	{r6, lr}
         sub	sp, sp, #16
-        add	r12, sp, #8
-        str	r12, [sp]
+        add	r6, sp, #8
+        str	r6, [sp]
 #if defined(__MINGW32__)
-        mov     r12, r0
-        mov     r0, r2
-        mov     r2, r12
-        mov     r12, r1
-        mov     r1, r3
-        mov     r3, r12
+        movs    r6, r0
+        movs    r0, r2
+        movs    r2, r6
+        movs    r6, r1
+        movs    r1, r3
+        movs    r3, r6
 #endif
         bl	SYMBOL_NAME(__udivmoddi4)
         ldr	r2, [sp, #8]
         ldr	r3, [sp, #12]
         add	sp, sp, #16
-        pop	{r11, pc}
+        pop	{r6, pc}
 END_COMPILERRT_FUNCTION(__aeabi_uldivmod)
 
 NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/builtins/arm/comparesf2.S b/lib/builtins/arm/comparesf2.S
index a5b7e36..ef7091b 100644
--- a/lib/builtins/arm/comparesf2.S
+++ b/lib/builtins/arm/comparesf2.S
@@ -69,7 +69,7 @@
     // the subsequent operations.
 #if __ARM_ARCH_ISA_THUMB == 1
     lsrs    r6,     r3, #1
-    orrs    r6,     r2, r6
+    orrs    r6,     r2
 #else
     orrs    r12,    r2, r3, lsr #1
 #endif
@@ -194,7 +194,7 @@
     lsls    r2,        r0, #1
     lsls    r3,        r1, #1
     lsrs    r6,        r3, #1
-    orrs    r6,        r2, r6
+    orrs    r6,        r2
     beq     1f
     movs    r6,        r0
     eors    r6,        r1
diff --git a/lib/builtins/arm/eqdf2vfp.S b/lib/builtins/arm/eqdf2vfp.S
index 8fa0b2d..d507065 100644
--- a/lib/builtins/arm/eqdf2vfp.S
+++ b/lib/builtins/arm/eqdf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7		
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(eq)
 	moveq	r0, #1		// set result register to 1 if equal
 	movne	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/eqsf2vfp.S b/lib/builtins/arm/eqsf2vfp.S
index 3776bf4..fd72b2f 100644
--- a/lib/builtins/arm/eqsf2vfp.S
+++ b/lib/builtins/arm/eqsf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(eq)
 	moveq	r0, #1      // set result register to 1 if equal
 	movne	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/gedf2vfp.S b/lib/builtins/arm/gedf2vfp.S
index 14899f0..364fc5b 100644
--- a/lib/builtins/arm/gedf2vfp.S
+++ b/lib/builtins/arm/gedf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(ge)
 	movge	r0, #1      // set result register to 1 if greater than or equal
 	movlt	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/gesf2vfp.S b/lib/builtins/arm/gesf2vfp.S
index b49d04d..346c347 100644
--- a/lib/builtins/arm/gesf2vfp.S
+++ b/lib/builtins/arm/gesf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(ge)
 	movge	r0, #1      // set result register to 1 if greater than or equal
 	movlt	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/gtdf2vfp.S b/lib/builtins/arm/gtdf2vfp.S
index 8166305..3389c3a 100644
--- a/lib/builtins/arm/gtdf2vfp.S
+++ b/lib/builtins/arm/gtdf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(gt)
 	movgt	r0, #1		// set result register to 1 if equal
 	movle	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/gtsf2vfp.S b/lib/builtins/arm/gtsf2vfp.S
index d2d8a23..afdba8b 100644
--- a/lib/builtins/arm/gtsf2vfp.S
+++ b/lib/builtins/arm/gtsf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(gt)
 	movgt	r0, #1		// set result register to 1 if equal
 	movle	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/ledf2vfp.S b/lib/builtins/arm/ledf2vfp.S
index a9dab77..4bbe4c8 100644
--- a/lib/builtins/arm/ledf2vfp.S
+++ b/lib/builtins/arm/ledf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(ls)
 	movls	r0, #1		// set result register to 1 if equal
 	movhi	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/lesf2vfp.S b/lib/builtins/arm/lesf2vfp.S
index 7e127f4..51232bd 100644
--- a/lib/builtins/arm/lesf2vfp.S
+++ b/lib/builtins/arm/lesf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(ls)
 	movls	r0, #1      // set result register to 1 if equal
 	movhi	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/ltdf2vfp.S b/lib/builtins/arm/ltdf2vfp.S
index 8b6f8e4..8e2928c 100644
--- a/lib/builtins/arm/ltdf2vfp.S
+++ b/lib/builtins/arm/ltdf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(mi)
 	movmi	r0, #1		// set result register to 1 if equal
 	movpl	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/ltsf2vfp.S b/lib/builtins/arm/ltsf2vfp.S
index c4ff812..59c00c6 100644
--- a/lib/builtins/arm/ltsf2vfp.S
+++ b/lib/builtins/arm/ltsf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(mi)
 	movmi	r0, #1      // set result register to 1 if equal
 	movpl	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/nedf2vfp.S b/lib/builtins/arm/nedf2vfp.S
index 7d884e0..aef72eb 100644
--- a/lib/builtins/arm/nedf2vfp.S
+++ b/lib/builtins/arm/nedf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7		
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(ne)
 	movne	r0, #1		// set result register to 0 if unequal
 	moveq	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/nesf2vfp.S b/lib/builtins/arm/nesf2vfp.S
index 97c764f..50d60f4 100644
--- a/lib/builtins/arm/nesf2vfp.S
+++ b/lib/builtins/arm/nesf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(ne)
 	movne	r0, #1      // set result register to 1 if unequal
 	moveq	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/udivsi3.S b/lib/builtins/arm/udivsi3.S
index fcc472b..b97b308 100644
--- a/lib/builtins/arm/udivsi3.S
+++ b/lib/builtins/arm/udivsi3.S
@@ -37,7 +37,16 @@
 	beq     LOCAL_LABEL(divby0)
 	udiv	r0, r0, r1
 	bx  	lr
-#else
+
+LOCAL_LABEL(divby0):
+	mov     r0, #0
+#  ifdef __ARM_EABI__
+	b       __aeabi_idiv0
+#  else
+	JMP(lr)
+#  endif
+
+#else /* ! __ARM_ARCH_EXT_IDIV__ */
 	cmp	r1, #1
 	bcc	LOCAL_LABEL(divby0)
 #if __ARM_ARCH_ISA_THUMB == 1
@@ -186,9 +195,12 @@
 LOCAL_LABEL(divby0):
 	movs	r0, #0
 #      if defined(__ARM_EABI__)
+	push {r7, lr}
 	bl	__aeabi_idiv0 // due to relocation limit, can't use b.
-#      endif
+	pop  {r7, pc}
+#      else
 	JMP(lr)
+#      endif
 
 
 #if __ARM_ARCH_ISA_THUMB == 1
@@ -252,16 +264,6 @@
 	JMP(lr)
 #endif /* __ARM_ARCH_EXT_IDIV__ */
 
-#if __ARM_ARCH_EXT_IDIV__
-LOCAL_LABEL(divby0):
-        mov     r0, #0
-#  ifdef __ARM_EABI__
-        b       __aeabi_idiv0
-#  else
-        JMP(lr)
-#  endif
-#endif
-
 END_COMPILERRT_FUNCTION(__udivsi3)
 
 NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/builtins/arm/unorddf2vfp.S b/lib/builtins/arm/unorddf2vfp.S
index 8556375..6625fa8 100644
--- a/lib/builtins/arm/unorddf2vfp.S
+++ b/lib/builtins/arm/unorddf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f64 d6, d7
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(vs)
 	movvs	r0, #1      // set result register to 1 if "overflow" (any NaNs)
 	movvc	r0, #0
 	bx	lr
diff --git a/lib/builtins/arm/unordsf2vfp.S b/lib/builtins/arm/unordsf2vfp.S
index 2b16b49..0b5da2b 100644
--- a/lib/builtins/arm/unordsf2vfp.S
+++ b/lib/builtins/arm/unordsf2vfp.S
@@ -27,6 +27,7 @@
 	vcmp.f32 s14, s15
 #endif
 	vmrs	apsr_nzcv, fpscr
+	ITE(vs)
 	movvs	r0, #1      // set result register to 1 if "overflow" (any NaNs)
 	movvc	r0, #0
 	bx	lr
diff --git a/lib/builtins/ashldi3.c b/lib/builtins/ashldi3.c
index eb4698a..fcb0abd 100644
--- a/lib/builtins/ashldi3.c
+++ b/lib/builtins/ashldi3.c
@@ -18,8 +18,6 @@
 
 /* Precondition:  0 <= b < bits_in_dword */
 
-ARM_EABI_FNALIAS(llsl, ashldi3)
-
 COMPILER_RT_ABI di_int
 __ashldi3(di_int a, si_int b)
 {
@@ -41,3 +39,10 @@
     }
     return result.all;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI di_int __aeabi_llsl(di_int a, si_int b) {
+  return __ashldi3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/ashrdi3.c b/lib/builtins/ashrdi3.c
index 14c878b..b4ab4c6 100644
--- a/lib/builtins/ashrdi3.c
+++ b/lib/builtins/ashrdi3.c
@@ -18,8 +18,6 @@
 
 /* Precondition:  0 <= b < bits_in_dword */
 
-ARM_EABI_FNALIAS(lasr, ashrdi3)
-
 COMPILER_RT_ABI di_int
 __ashrdi3(di_int a, si_int b)
 {
@@ -42,3 +40,10 @@
     }
     return result.all;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI di_int __aeabi_lasr(di_int a, si_int b) {
+  return __ashrdi3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/assembly.h b/lib/builtins/assembly.h
index 29d9f88..b15da52 100644
--- a/lib/builtins/assembly.h
+++ b/lib/builtins/assembly.h
@@ -44,7 +44,8 @@
 #endif
 #define CONST_SECTION .section .rodata
 
-#if defined(__GNU__) || defined(__ANDROID__) || defined(__FreeBSD__)
+#if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \
+    defined(__linux__)
 #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits
 #else
 #define NO_EXEC_STACK_DIRECTIVE
@@ -95,9 +96,11 @@
 #if __ARM_ARCH_ISA_THUMB == 2
 #define IT(cond)  it cond
 #define ITT(cond) itt cond
+#define ITE(cond) ite cond
 #else
 #define IT(cond)
 #define ITT(cond)
+#define ITE(cond)
 #endif
 
 #if __ARM_ARCH_ISA_THUMB == 2
diff --git a/lib/builtins/bswapdi2.c b/lib/builtins/bswapdi2.c
new file mode 100644
index 0000000..eb22000
--- /dev/null
+++ b/lib/builtins/bswapdi2.c
@@ -0,0 +1,27 @@
+/* ===-- bswapdi2.c - Implement __bswapdi2 ---------------------------------===
+ *
+ *               The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements __bswapdi2 for the compiler_rt library.
+ *
+ * ===----------------------------------------------------------------------===
+ */
+
+#include "int_lib.h"
+
+COMPILER_RT_ABI uint64_t __bswapdi2(uint64_t u) {
+  return (
+      (((u)&0xff00000000000000ULL) >> 56) |
+      (((u)&0x00ff000000000000ULL) >> 40) |
+      (((u)&0x0000ff0000000000ULL) >> 24) |
+      (((u)&0x000000ff00000000ULL) >> 8)  |
+      (((u)&0x00000000ff000000ULL) << 8)  |
+      (((u)&0x0000000000ff0000ULL) << 24) |
+      (((u)&0x000000000000ff00ULL) << 40) |
+      (((u)&0x00000000000000ffULL) << 56));
+}
diff --git a/lib/builtins/bswapsi2.c b/lib/builtins/bswapsi2.c
new file mode 100644
index 0000000..5d941e6
--- /dev/null
+++ b/lib/builtins/bswapsi2.c
@@ -0,0 +1,23 @@
+/* ===-- bswapsi2.c - Implement __bswapsi2 ---------------------------------===
+ *
+ *               The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements __bswapsi2 for the compiler_rt library.
+ *
+ * ===----------------------------------------------------------------------===
+ */
+
+#include "int_lib.h"
+
+COMPILER_RT_ABI uint32_t __bswapsi2(uint32_t u) {
+  return (
+      (((u)&0xff000000) >> 24) |
+      (((u)&0x00ff0000) >> 8)  |
+      (((u)&0x0000ff00) << 8)  |
+      (((u)&0x000000ff) << 24));
+}
diff --git a/lib/builtins/clear_cache.c b/lib/builtins/clear_cache.c
index 4c2ac3b..25570fc 100644
--- a/lib/builtins/clear_cache.c
+++ b/lib/builtins/clear_cache.c
@@ -82,10 +82,6 @@
   #endif
 #endif
 
-#if defined(__linux__) && defined(__arm__)
-  #include <asm/unistd.h>
-#endif
-
 /*
  * The compiler generates calls to __clear_cache() when creating 
  * trampoline functions on the stack for use with nested functions.
@@ -94,7 +90,7 @@
  */
 
 void __clear_cache(void *start, void *end) {
-#if __i386__ || __x86_64__
+#if __i386__ || __x86_64__ || defined(_M_IX86) || defined(_M_X64)
 /*
  * Intel processors have a unified instruction and data cache
  * so there is nothing to do
@@ -108,6 +104,15 @@
 
         sysarch(ARM_SYNC_ICACHE, &arg);
     #elif defined(__linux__)
+    /*
+     * We used to include asm/unistd.h for the __ARM_NR_cacheflush define, but
+     * it also brought many other unused defines, as well as a dependency on
+     * kernel headers to be installed.
+     *
+     * This value is stable at least since Linux 3.13 and should remain so for
+     * compatibility reasons, warranting it's re-definition here.
+     */
+    #define __ARM_NR_cacheflush 0x0f0002
          register int start_reg __asm("r0") = (int) (intptr_t) start;
          const register int end_reg __asm("r1") = (int) (intptr_t) end;
          const register int flags __asm("r2") = 0;
diff --git a/lib/builtins/comparedf2.c b/lib/builtins/comparedf2.c
index 9e29752..c5bb169 100644
--- a/lib/builtins/comparedf2.c
+++ b/lib/builtins/comparedf2.c
@@ -113,8 +113,6 @@
     }
 }
 
-ARM_EABI_FNALIAS(dcmpun, unorddf2)
-
 COMPILER_RT_ABI int
 __unorddf2(fp_t a, fp_t b) {
     const rep_t aAbs = toRep(a) & absMask;
@@ -144,3 +142,9 @@
     return __gedf2(a, b);
 }
 
+#if defined(__ARM_EABI__)
+AEABI_RTABI int __aeabi_dcmpun(fp_t a, fp_t b) {
+  return __unorddf2(a, b);
+}
+#endif
+
diff --git a/lib/builtins/comparesf2.c b/lib/builtins/comparesf2.c
index 1fd5063..4badb5e 100644
--- a/lib/builtins/comparesf2.c
+++ b/lib/builtins/comparesf2.c
@@ -113,8 +113,6 @@
     }
 }
 
-ARM_EABI_FNALIAS(fcmpun, unordsf2)
-
 COMPILER_RT_ABI int
 __unordsf2(fp_t a, fp_t b) {
     const rep_t aAbs = toRep(a) & absMask;
@@ -143,3 +141,10 @@
 __gtsf2(fp_t a, fp_t b) {
     return __gesf2(a, b);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI int __aeabi_fcmpun(fp_t a, fp_t b) {
+  return __unordsf2(a, b);
+}
+#endif
+
diff --git a/lib/builtins/cpu_model.c b/lib/builtins/cpu_model.c
index 9a37370..83ea7a4 100644
--- a/lib/builtins/cpu_model.c
+++ b/lib/builtins/cpu_model.c
@@ -27,6 +27,10 @@
 #include <intrin.h>
 #endif
 
+#ifndef __has_attribute
+#define __has_attribute(attr) 0
+#endif
+
 enum VendorSignatures {
   SIG_INTEL = 0x756e6547 /* Genu */,
   SIG_AMD = 0x68747541 /* Auth */
@@ -40,29 +44,16 @@
 };
 
 enum ProcessorTypes {
-  INTEL_ATOM = 1,
+  INTEL_BONNELL = 1,
   INTEL_CORE2,
   INTEL_COREI7,
   AMDFAM10H,
   AMDFAM15H,
-  INTEL_i386,
-  INTEL_i486,
-  INTEL_PENTIUM,
-  INTEL_PENTIUM_PRO,
-  INTEL_PENTIUM_II,
-  INTEL_PENTIUM_III,
-  INTEL_PENTIUM_IV,
-  INTEL_PENTIUM_M,
-  INTEL_CORE_DUO,
-  INTEL_XEONPHI,
-  INTEL_X86_64,
-  INTEL_NOCONA,
-  INTEL_PRESCOTT,
-  AMD_i486,
-  AMDPENTIUM,
-  AMDATHLON,
-  AMDFAM14H,
-  AMDFAM16H,
+  INTEL_SILVERMONT,
+  INTEL_KNL,
+  AMD_BTVER1,
+  AMD_BTVER2,
+  AMDFAM17H,
   CPU_TYPE_MAX
 };
 
@@ -75,32 +66,14 @@
   AMDFAM10H_ISTANBUL,
   AMDFAM15H_BDVER1,
   AMDFAM15H_BDVER2,
-  INTEL_PENTIUM_MMX,
-  INTEL_CORE2_65,
-  INTEL_CORE2_45,
+  AMDFAM15H_BDVER3,
+  AMDFAM15H_BDVER4,
+  AMDFAM17H_ZNVER1,
   INTEL_COREI7_IVYBRIDGE,
   INTEL_COREI7_HASWELL,
   INTEL_COREI7_BROADWELL,
   INTEL_COREI7_SKYLAKE,
   INTEL_COREI7_SKYLAKE_AVX512,
-  INTEL_ATOM_BONNELL,
-  INTEL_ATOM_SILVERMONT,
-  INTEL_KNIGHTS_LANDING,
-  AMDPENTIUM_K6,
-  AMDPENTIUM_K62,
-  AMDPENTIUM_K63,
-  AMDPENTIUM_GEODE,
-  AMDATHLON_TBIRD,
-  AMDATHLON_MP,
-  AMDATHLON_XP,
-  AMDATHLON_K8SSE3,
-  AMDATHLON_OPTERON,
-  AMDATHLON_FX,
-  AMDATHLON_64,
-  AMD_BTVER1,
-  AMD_BTVER2,
-  AMDFAM15H_BDVER3,
-  AMDFAM15H_BDVER4,
   CPU_SUBTYPE_MAX
 };
 
@@ -116,11 +89,26 @@
   FEATURE_SSE4_2,
   FEATURE_AVX,
   FEATURE_AVX2,
-  FEATURE_AVX512,
-  FEATURE_AVX512SAVE,
-  FEATURE_MOVBE,
-  FEATURE_ADX,
-  FEATURE_EM64T
+  FEATURE_SSE4_A,
+  FEATURE_FMA4,
+  FEATURE_XOP,
+  FEATURE_FMA,
+  FEATURE_AVX512F,
+  FEATURE_BMI,
+  FEATURE_BMI2,
+  FEATURE_AES,
+  FEATURE_PCLMUL,
+  FEATURE_AVX512VL,
+  FEATURE_AVX512BW,
+  FEATURE_AVX512DQ,
+  FEATURE_AVX512CD,
+  FEATURE_AVX512ER,
+  FEATURE_AVX512PF,
+  FEATURE_AVX512VBMI,
+  FEATURE_AVX512IFMA,
+  FEATURE_AVX5124VNNIW,
+  FEATURE_AVX5124FMAPS,
+  FEATURE_AVX512VPOPCNTDQ
 };
 
 // The check below for i386 was copied from clang's cpuid.h (__get_cpuid_max).
@@ -160,26 +148,27 @@
 
 /// getX86CpuIDAndInfo - Execute the specified cpuid and return the 4 values in
 /// the specified arguments.  If we can't run cpuid on the host, return true.
-static void getX86CpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX,
+static bool getX86CpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX,
                                unsigned *rECX, unsigned *rEDX) {
 #if defined(__GNUC__) || defined(__clang__)
 #if defined(__x86_64__)
-  // gcc doesn't know cpuid would clobber ebx/rbx. Preseve it manually.
+  // gcc doesn't know cpuid would clobber ebx/rbx. Preserve it manually.
+  // FIXME: should we save this for Clang?
   __asm__("movq\t%%rbx, %%rsi\n\t"
           "cpuid\n\t"
           "xchgq\t%%rbx, %%rsi\n\t"
           : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
           : "a"(value));
+  return false;
 #elif defined(__i386__)
   __asm__("movl\t%%ebx, %%esi\n\t"
           "cpuid\n\t"
           "xchgl\t%%ebx, %%esi\n\t"
           : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
           : "a"(value));
-// pedantic #else returns to appease -Wunreachable-code (so we don't generate
-// postprocessed code that looks like "return true; return false;")
+  return false;
 #else
-  assert(0 && "This method is defined only for x86.");
+  return true;
 #endif
 #elif defined(_MSC_VER)
   // The MSVC intrinsic is portable across x86 and x64.
@@ -189,19 +178,20 @@
   *rEBX = registers[1];
   *rECX = registers[2];
   *rEDX = registers[3];
+  return false;
 #else
-  assert(0 && "This method is defined only for GNUC, Clang or MSVC.");
+  return true;
 #endif
 }
 
 /// getX86CpuIDAndInfoEx - Execute the specified cpuid with subleaf and return
 /// the 4 values in the specified arguments.  If we can't run cpuid on the host,
 /// return true.
-static void getX86CpuIDAndInfoEx(unsigned value, unsigned subleaf,
+static bool getX86CpuIDAndInfoEx(unsigned value, unsigned subleaf,
                                  unsigned *rEAX, unsigned *rEBX, unsigned *rECX,
                                  unsigned *rEDX) {
-#if defined(__x86_64__) || defined(_M_X64)
 #if defined(__GNUC__) || defined(__clang__)
+#if defined(__x86_64__)
   // gcc doesn't know cpuid would clobber ebx/rbx. Preserve it manually.
   // FIXME: should we save this for Clang?
   __asm__("movq\t%%rbx, %%rsi\n\t"
@@ -209,6 +199,17 @@
           "xchgq\t%%rbx, %%rsi\n\t"
           : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
           : "a"(value), "c"(subleaf));
+  return false;
+#elif defined(__i386__)
+  __asm__("movl\t%%ebx, %%esi\n\t"
+          "cpuid\n\t"
+          "xchgl\t%%ebx, %%esi\n\t"
+          : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
+          : "a"(value), "c"(subleaf));
+  return false;
+#else
+  return true;
+#endif
 #elif defined(_MSC_VER)
   int registers[4];
   __cpuidex(registers, value, subleaf);
@@ -216,35 +217,9 @@
   *rEBX = registers[1];
   *rECX = registers[2];
   *rEDX = registers[3];
+  return false;
 #else
-  assert(0 && "This method is defined only for GNUC, Clang or MSVC.");
-#endif
-#elif defined(__i386__) || defined(_M_IX86)
-#if defined(__GNUC__) || defined(__clang__)
-  __asm__("movl\t%%ebx, %%esi\n\t"
-          "cpuid\n\t"
-          "xchgl\t%%ebx, %%esi\n\t"
-          : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
-          : "a"(value), "c"(subleaf));
-#elif defined(_MSC_VER)
-  __asm {
-      mov   eax,value
-      mov   ecx,subleaf
-      cpuid
-      mov   esi,rEAX
-      mov   dword ptr [esi],eax
-      mov   esi,rEBX
-      mov   dword ptr [esi],ebx
-      mov   esi,rECX
-      mov   dword ptr [esi],ecx
-      mov   esi,rEDX
-      mov   dword ptr [esi],edx
-  }
-#else
-  assert(0 && "This method is defined only for GNUC, Clang or MSVC.");
-#endif
-#else
-  assert(0 && "This method is defined only for x86.");
+  return true;
 #endif
 }
 
@@ -279,84 +254,15 @@
   }
 }
 
-static void getIntelProcessorTypeAndSubtype(unsigned int Family,
-                                            unsigned int Model,
-                                            unsigned int Brand_id,
-                                            unsigned int Features,
-                                            unsigned *Type, unsigned *Subtype) {
+static void
+getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model,
+                                unsigned Brand_id, unsigned Features,
+                                unsigned *Type, unsigned *Subtype) {
   if (Brand_id != 0)
     return;
   switch (Family) {
-  case 3:
-    *Type = INTEL_i386;
-    break;
-  case 4:
-    switch (Model) {
-    case 0: // Intel486 DX processors
-    case 1: // Intel486 DX processors
-    case 2: // Intel486 SX processors
-    case 3: // Intel487 processors, IntelDX2 OverDrive processors,
-            // IntelDX2 processors
-    case 4: // Intel486 SL processor
-    case 5: // IntelSX2 processors
-    case 7: // Write-Back Enhanced IntelDX2 processors
-    case 8: // IntelDX4 OverDrive processors, IntelDX4 processors
-    default:
-      *Type = INTEL_i486;
-      break;
-    }
-  case 5:
-    switch (Model) {
-    case 1: // Pentium OverDrive processor for Pentium processor (60, 66),
-            // Pentium processors (60, 66)
-    case 2: // Pentium OverDrive processor for Pentium processor (75, 90,
-            // 100, 120, 133), Pentium processors (75, 90, 100, 120, 133,
-            // 150, 166, 200)
-    case 3: // Pentium OverDrive processors for Intel486 processor-based
-            // systems
-      *Type = INTEL_PENTIUM;
-      break;
-    case 4: // Pentium OverDrive processor with MMX technology for Pentium
-            // processor (75, 90, 100, 120, 133), Pentium processor with
-            // MMX technology (166, 200)
-      *Type = INTEL_PENTIUM;
-      *Subtype = INTEL_PENTIUM_MMX;
-      break;
-    default:
-      *Type = INTEL_PENTIUM;
-      break;
-    }
   case 6:
     switch (Model) {
-    case 0x01: // Pentium Pro processor
-      *Type = INTEL_PENTIUM_PRO;
-      break;
-    case 0x03: // Intel Pentium II OverDrive processor, Pentium II processor,
-               // model 03
-    case 0x05: // Pentium II processor, model 05, Pentium II Xeon processor,
-               // model 05, and Intel Celeron processor, model 05
-    case 0x06: // Celeron processor, model 06
-      *Type = INTEL_PENTIUM_II;
-      break;
-    case 0x07: // Pentium III processor, model 07, and Pentium III Xeon
-               // processor, model 07
-    case 0x08: // Pentium III processor, model 08, Pentium III Xeon processor,
-               // model 08, and Celeron processor, model 08
-    case 0x0a: // Pentium III Xeon processor, model 0Ah
-    case 0x0b: // Pentium III processor, model 0Bh
-      *Type = INTEL_PENTIUM_III;
-      break;
-    case 0x09: // Intel Pentium M processor, Intel Celeron M processor model 09.
-    case 0x0d: // Intel Pentium M processor, Intel Celeron M processor, model
-               // 0Dh. All processors are manufactured using the 90 nm process.
-    case 0x15: // Intel EP80579 Integrated Processor and Intel EP80579
-               // Integrated Processor with Intel QuickAssist Technology
-      *Type = INTEL_PENTIUM_M;
-      break;
-    case 0x0e: // Intel Core Duo processor, Intel Core Solo processor, model
-               // 0Eh. All processors are manufactured using the 65 nm process.
-      *Type = INTEL_CORE_DUO;
-      break;   // yonah
     case 0x0f: // Intel Core 2 Duo processor, Intel Core 2 Duo mobile
                // processor, Intel Core 2 Quad processor, Intel Core 2 Quad
                // mobile processor, Intel Core 2 Extreme processor, Intel
@@ -364,9 +270,6 @@
                // 0Fh. All processors are manufactured using the 65 nm process.
     case 0x16: // Intel Celeron processor model 16h. All processors are
                // manufactured using the 65 nm process
-      *Type = INTEL_CORE2; // "core2"
-      *Subtype = INTEL_CORE2_65;
-      break;
     case 0x17: // Intel Core 2 Extreme processor, Intel Xeon processor, model
                // 17h. All processors are manufactured using the 45 nm process.
                //
@@ -374,14 +277,13 @@
     case 0x1d: // Intel Xeon processor MP. All processors are manufactured using
                // the 45 nm process.
       *Type = INTEL_CORE2; // "penryn"
-      *Subtype = INTEL_CORE2_45;
       break;
     case 0x1a: // Intel Core i7 processor and Intel Xeon processor. All
                // processors are manufactured using the 45 nm process.
     case 0x1e: // Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz.
                // As found in a Summer 2010 model iMac.
     case 0x1f:
-    case 0x2e:              // Nehalem EX
+    case 0x2e:             // Nehalem EX
       *Type = INTEL_COREI7; // "nehalem"
       *Subtype = INTEL_COREI7_NEHALEM;
       break;
@@ -399,7 +301,7 @@
       *Subtype = INTEL_COREI7_SANDYBRIDGE;
       break;
     case 0x3a:
-    case 0x3e:              // Ivy Bridge EP
+    case 0x3e:             // Ivy Bridge EP
       *Type = INTEL_COREI7; // "ivybridge"
       *Subtype = INTEL_COREI7_IVYBRIDGE;
       break;
@@ -423,22 +325,26 @@
       break;
 
     // Skylake:
-    case 0x4e:
-      *Type = INTEL_COREI7; // "skylake-avx512"
-      *Subtype = INTEL_COREI7_SKYLAKE_AVX512;
-      break;
-    case 0x5e:
+    case 0x4e: // Skylake mobile
+    case 0x5e: // Skylake desktop
+    case 0x8e: // Kaby Lake mobile
+    case 0x9e: // Kaby Lake desktop
       *Type = INTEL_COREI7; // "skylake"
       *Subtype = INTEL_COREI7_SKYLAKE;
       break;
 
+    // Skylake Xeon:
+    case 0x55:
+      *Type = INTEL_COREI7;
+      *Subtype = INTEL_COREI7_SKYLAKE_AVX512; // "skylake-avx512"
+      break;
+
     case 0x1c: // Most 45 nm Intel Atom processors
     case 0x26: // 45 nm Atom Lincroft
     case 0x27: // 32 nm Atom Medfield
     case 0x35: // 32 nm Atom Midview
     case 0x36: // 32 nm Atom Midview
-      *Type = INTEL_ATOM;
-      *Subtype = INTEL_ATOM_BONNELL;
+      *Type = INTEL_BONNELL;
       break; // "bonnell"
 
     // Atom Silvermont codes from the Intel software optimization guide.
@@ -448,185 +354,29 @@
     case 0x5a:
     case 0x5d:
     case 0x4c: // really airmont
-      *Type = INTEL_ATOM;
-      *Subtype = INTEL_ATOM_SILVERMONT;
+      *Type = INTEL_SILVERMONT;
       break; // "silvermont"
 
     case 0x57:
-      *Type = INTEL_XEONPHI; // knl
-      *Subtype = INTEL_KNIGHTS_LANDING;
+      *Type = INTEL_KNL; // knl
       break;
 
-    default: // Unknown family 6 CPU, try to guess.
-      if (Features & (1 << FEATURE_AVX512)) {
-        *Type = INTEL_XEONPHI; // knl
-        *Subtype = INTEL_KNIGHTS_LANDING;
-        break;
-      }
-      if (Features & (1 << FEATURE_ADX)) {
-        *Type = INTEL_COREI7;
-        *Subtype = INTEL_COREI7_BROADWELL;
-        break;
-      }
-      if (Features & (1 << FEATURE_AVX2)) {
-        *Type = INTEL_COREI7;
-        *Subtype = INTEL_COREI7_HASWELL;
-        break;
-      }
-      if (Features & (1 << FEATURE_AVX)) {
-        *Type = INTEL_COREI7;
-        *Subtype = INTEL_COREI7_SANDYBRIDGE;
-        break;
-      }
-      if (Features & (1 << FEATURE_SSE4_2)) {
-        if (Features & (1 << FEATURE_MOVBE)) {
-          *Type = INTEL_ATOM;
-          *Subtype = INTEL_ATOM_SILVERMONT;
-        } else {
-          *Type = INTEL_COREI7;
-          *Subtype = INTEL_COREI7_NEHALEM;
-        }
-        break;
-      }
-      if (Features & (1 << FEATURE_SSE4_1)) {
-        *Type = INTEL_CORE2; // "penryn"
-        *Subtype = INTEL_CORE2_45;
-        break;
-      }
-      if (Features & (1 << FEATURE_SSSE3)) {
-        if (Features & (1 << FEATURE_MOVBE)) {
-          *Type = INTEL_ATOM;
-          *Subtype = INTEL_ATOM_BONNELL; // "bonnell"
-        } else {
-          *Type = INTEL_CORE2; // "core2"
-          *Subtype = INTEL_CORE2_65;
-        }
-        break;
-      }
-      if (Features & (1 << FEATURE_EM64T)) {
-        *Type = INTEL_X86_64;
-        break; // x86-64
-      }
-      if (Features & (1 << FEATURE_SSE2)) {
-        *Type = INTEL_PENTIUM_M;
-        break;
-      }
-      if (Features & (1 << FEATURE_SSE)) {
-        *Type = INTEL_PENTIUM_III;
-        break;
-      }
-      if (Features & (1 << FEATURE_MMX)) {
-        *Type = INTEL_PENTIUM_II;
-        break;
-      }
-      *Type = INTEL_PENTIUM_PRO;
+    default: // Unknown family 6 CPU.
       break;
+    break;
     }
-  case 15: {
-    switch (Model) {
-    case 0: // Pentium 4 processor, Intel Xeon processor. All processors are
-            // model 00h and manufactured using the 0.18 micron process.
-    case 1: // Pentium 4 processor, Intel Xeon processor, Intel Xeon
-            // processor MP, and Intel Celeron processor. All processors are
-            // model 01h and manufactured using the 0.18 micron process.
-    case 2: // Pentium 4 processor, Mobile Intel Pentium 4 processor - M,
-            // Intel Xeon processor, Intel Xeon processor MP, Intel Celeron
-            // processor, and Mobile Intel Celeron processor. All processors
-            // are model 02h and manufactured using the 0.13 micron process.
-      *Type =
-          ((Features & (1 << FEATURE_EM64T)) ? INTEL_X86_64 : INTEL_PENTIUM_IV);
-      break;
-
-    case 3: // Pentium 4 processor, Intel Xeon processor, Intel Celeron D
-            // processor. All processors are model 03h and manufactured using
-            // the 90 nm process.
-    case 4: // Pentium 4 processor, Pentium 4 processor Extreme Edition,
-            // Pentium D processor, Intel Xeon processor, Intel Xeon
-            // processor MP, Intel Celeron D processor. All processors are
-            // model 04h and manufactured using the 90 nm process.
-    case 6: // Pentium 4 processor, Pentium D processor, Pentium processor
-            // Extreme Edition, Intel Xeon processor, Intel Xeon processor
-            // MP, Intel Celeron D processor. All processors are model 06h
-            // and manufactured using the 65 nm process.
-      *Type =
-          ((Features & (1 << FEATURE_EM64T)) ? INTEL_NOCONA : INTEL_PRESCOTT);
-      break;
-
-    default:
-      *Type =
-          ((Features & (1 << FEATURE_EM64T)) ? INTEL_X86_64 : INTEL_PENTIUM_IV);
-      break;
-    }
-  }
   default:
-    break; /*"generic"*/
+    break; // Unknown.
   }
 }
 
-static void getAMDProcessorTypeAndSubtype(unsigned int Family,
-                                          unsigned int Model,
-                                          unsigned int Features, unsigned *Type,
+static void getAMDProcessorTypeAndSubtype(unsigned Family, unsigned Model,
+                                          unsigned Features, unsigned *Type,
                                           unsigned *Subtype) {
   // FIXME: this poorly matches the generated SubtargetFeatureKV table.  There
   // appears to be no way to generate the wide variety of AMD-specific targets
   // from the information returned from CPUID.
   switch (Family) {
-  case 4:
-    *Type = AMD_i486;
-  case 5:
-    *Type = AMDPENTIUM;
-    switch (Model) {
-    case 6:
-    case 7:
-      *Subtype = AMDPENTIUM_K6;
-      break; // "k6"
-    case 8:
-      *Subtype = AMDPENTIUM_K62;
-      break; // "k6-2"
-    case 9:
-    case 13:
-      *Subtype = AMDPENTIUM_K63;
-      break; // "k6-3"
-    case 10:
-      *Subtype = AMDPENTIUM_GEODE;
-      break; // "geode"
-    default:
-      break;
-    }
-  case 6:
-    *Type = AMDATHLON;
-    switch (Model) {
-    case 4:
-      *Subtype = AMDATHLON_TBIRD;
-      break; // "athlon-tbird"
-    case 6:
-    case 7:
-    case 8:
-      *Subtype = AMDATHLON_MP;
-      break; // "athlon-mp"
-    case 10:
-      *Subtype = AMDATHLON_XP;
-      break; // "athlon-xp"
-    default:
-      break;
-    }
-  case 15:
-    *Type = AMDATHLON;
-    if (Features & (1 << FEATURE_SSE3)) {
-      *Subtype = AMDATHLON_K8SSE3;
-      break; // "k8-sse3"
-    }
-    switch (Model) {
-    case 1:
-      *Subtype = AMDATHLON_OPTERON;
-      break; // "opteron"
-    case 5:
-      *Subtype = AMDATHLON_FX;
-      break; // "athlon-fx"; also opteron
-    default:
-      *Subtype = AMDATHLON_64;
-      break; // "athlon64"
-    }
   case 16:
     *Type = AMDFAM10H; // "amdfam10"
     switch (Model) {
@@ -639,23 +389,16 @@
     case 8:
       *Subtype = AMDFAM10H_ISTANBUL;
       break;
-    default:
-      break;
     }
+    break;
   case 20:
-    *Type = AMDFAM14H;
-    *Subtype = AMD_BTVER1;
+    *Type = AMD_BTVER1;
     break; // "btver1";
   case 21:
     *Type = AMDFAM15H;
-    if (!(Features &
-          (1 << FEATURE_AVX))) { // If no AVX support, provide a sane fallback.
-      *Subtype = AMD_BTVER1;
-      break; // "btver1"
-    }
-    if (Model >= 0x50 && Model <= 0x6f) {
+    if (Model >= 0x60 && Model <= 0x7f) {
       *Subtype = AMDFAM15H_BDVER4;
-      break; // "bdver4"; 50h-6Fh: Excavator
+      break; // "bdver4"; 60h-7Fh: Excavator
     }
     if (Model >= 0x30 && Model <= 0x3f) {
       *Subtype = AMDFAM15H_BDVER3;
@@ -671,31 +414,47 @@
     }
     break;
   case 22:
-    *Type = AMDFAM16H;
-    if (!(Features &
-          (1 << FEATURE_AVX))) { // If no AVX support provide a sane fallback.
-      *Subtype = AMD_BTVER1;
-      break; // "btver1";
-    }
-    *Subtype = AMD_BTVER2;
+    *Type = AMD_BTVER2;
     break; // "btver2"
+  case 23:
+    *Type = AMDFAM17H;
+    *Subtype = AMDFAM17H_ZNVER1;
+    break;
   default:
     break; // "generic"
   }
 }
 
-static unsigned getAvailableFeatures(unsigned int ECX, unsigned int EDX,
-                                     unsigned MaxLeaf) {
+static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
+                                 unsigned *FeaturesOut) {
   unsigned Features = 0;
-  unsigned int EAX, EBX;
-  Features |= (((EDX >> 23) & 1) << FEATURE_MMX);
-  Features |= (((EDX >> 25) & 1) << FEATURE_SSE);
-  Features |= (((EDX >> 26) & 1) << FEATURE_SSE2);
-  Features |= (((ECX >> 0) & 1) << FEATURE_SSE3);
-  Features |= (((ECX >> 9) & 1) << FEATURE_SSSE3);
-  Features |= (((ECX >> 19) & 1) << FEATURE_SSE4_1);
-  Features |= (((ECX >> 20) & 1) << FEATURE_SSE4_2);
-  Features |= (((ECX >> 22) & 1) << FEATURE_MOVBE);
+  unsigned EAX, EBX;
+
+  if ((EDX >> 15) & 1)
+    Features |= 1 << FEATURE_CMOV;
+  if ((EDX >> 23) & 1)
+    Features |= 1 << FEATURE_MMX;
+  if ((EDX >> 25) & 1)
+    Features |= 1 << FEATURE_SSE;
+  if ((EDX >> 26) & 1)
+    Features |= 1 << FEATURE_SSE2;
+
+  if ((ECX >> 0) & 1)
+    Features |= 1 << FEATURE_SSE3;
+  if ((ECX >> 1) & 1)
+    Features |= 1 << FEATURE_PCLMUL;
+  if ((ECX >> 9) & 1)
+    Features |= 1 << FEATURE_SSSE3;
+  if ((ECX >> 12) & 1)
+    Features |= 1 << FEATURE_FMA;
+  if ((ECX >> 19) & 1)
+    Features |= 1 << FEATURE_SSE4_1;
+  if ((ECX >> 20) & 1)
+    Features |= 1 << FEATURE_SSE4_2;
+  if ((ECX >> 23) & 1)
+    Features |= 1 << FEATURE_POPCNT;
+  if ((ECX >> 25) & 1)
+    Features |= 1 << FEATURE_AES;
 
   // If CPUID indicates support for XSAVE, XRESTORE and AVX, and XGETBV
   // indicates that the AVX registers will be saved and restored on context
@@ -704,30 +463,72 @@
   bool HasAVX = ((ECX & AVXBits) == AVXBits) && !getX86XCR0(&EAX, &EDX) &&
                 ((EAX & 0x6) == 0x6);
   bool HasAVX512Save = HasAVX && ((EAX & 0xe0) == 0xe0);
-  bool HasLeaf7 = MaxLeaf >= 0x7;
-  getX86CpuIDAndInfoEx(0x7, 0x0, &EAX, &EBX, &ECX, &EDX);
-  bool HasADX = HasLeaf7 && ((EBX >> 19) & 1);
-  bool HasAVX2 = HasAVX && HasLeaf7 && (EBX & 0x20);
-  bool HasAVX512 = HasLeaf7 && HasAVX512Save && ((EBX >> 16) & 1);
-  Features |= (HasAVX << FEATURE_AVX);
-  Features |= (HasAVX2 << FEATURE_AVX2);
-  Features |= (HasAVX512 << FEATURE_AVX512);
-  Features |= (HasAVX512Save << FEATURE_AVX512SAVE);
-  Features |= (HasADX << FEATURE_ADX);
 
-  getX86CpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
-  Features |= (((EDX >> 29) & 0x1) << FEATURE_EM64T);
-  return Features;
+  if (HasAVX)
+    Features |= 1 << FEATURE_AVX;
+
+  bool HasLeaf7 =
+      MaxLeaf >= 0x7 && !getX86CpuIDAndInfoEx(0x7, 0x0, &EAX, &EBX, &ECX, &EDX);
+
+  if (HasLeaf7 && ((EBX >> 3) & 1))
+    Features |= 1 << FEATURE_BMI;
+  if (HasLeaf7 && ((EBX >> 5) & 1) && HasAVX)
+    Features |= 1 << FEATURE_AVX2;
+  if (HasLeaf7 && ((EBX >> 9) & 1))
+    Features |= 1 << FEATURE_BMI2;
+  if (HasLeaf7 && ((EBX >> 16) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512F;
+  if (HasLeaf7 && ((EBX >> 17) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512DQ;
+  if (HasLeaf7 && ((EBX >> 21) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512IFMA;
+  if (HasLeaf7 && ((EBX >> 26) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512PF;
+  if (HasLeaf7 && ((EBX >> 27) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512ER;
+  if (HasLeaf7 && ((EBX >> 28) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512CD;
+  if (HasLeaf7 && ((EBX >> 30) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512BW;
+  if (HasLeaf7 && ((EBX >> 31) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512VL;
+
+  if (HasLeaf7 && ((ECX >> 1) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512VBMI;
+  if (HasLeaf7 && ((ECX >> 14) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX512VPOPCNTDQ;
+
+  if (HasLeaf7 && ((EDX >> 2) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX5124VNNIW;
+  if (HasLeaf7 && ((EDX >> 3) & 1) && HasAVX512Save)
+    Features |= 1 << FEATURE_AVX5124FMAPS;
+
+  unsigned MaxExtLevel;
+  getX86CpuIDAndInfo(0x80000000, &MaxExtLevel, &EBX, &ECX, &EDX);
+
+  bool HasExtLeaf1 = MaxExtLevel >= 0x80000001 &&
+                     !getX86CpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
+  if (HasExtLeaf1 && ((ECX >> 6) & 1))
+    Features |= 1 << FEATURE_SSE4_A;
+  if (HasExtLeaf1 && ((ECX >> 11) & 1))
+    Features |= 1 << FEATURE_XOP;
+  if (HasExtLeaf1 && ((ECX >> 16) & 1))
+    Features |= 1 << FEATURE_FMA4;
+
+  *FeaturesOut = Features;
 }
 
-#ifdef HAVE_INIT_PRIORITY
-#define CONSTRUCTOR_PRIORITY (101)
+#if defined(HAVE_INIT_PRIORITY)
+#define CONSTRUCTOR_ATTRIBUTE __attribute__((__constructor__ 101))
+#elif __has_attribute(__constructor__)
+#define CONSTRUCTOR_ATTRIBUTE __attribute__((__constructor__))
 #else
-#define CONSTRUCTOR_PRIORITY
+// FIXME: For MSVC, we should make a function pointer global in .CRT$X?? so that
+// this runs during initialization.
+#define CONSTRUCTOR_ATTRIBUTE
 #endif
 
-int __cpu_indicator_init(void)
-    __attribute__((constructor CONSTRUCTOR_PRIORITY));
+int __cpu_indicator_init(void) CONSTRUCTOR_ATTRIBUTE;
 
 struct __processor_model {
   unsigned int __cpu_vendor;
@@ -742,13 +543,13 @@
    the priority set.  However, it still runs after ifunc initializers and
    needs to be called explicitly there.  */
 
-int __attribute__((constructor CONSTRUCTOR_PRIORITY))
+int CONSTRUCTOR_ATTRIBUTE
 __cpu_indicator_init(void) {
-  unsigned int EAX, EBX, ECX, EDX;
-  unsigned int MaxLeaf = 5;
-  unsigned int Vendor;
-  unsigned int Model, Family, Brand_id;
-  unsigned int Features = 0;
+  unsigned EAX, EBX, ECX, EDX;
+  unsigned MaxLeaf = 5;
+  unsigned Vendor;
+  unsigned Model, Family, Brand_id;
+  unsigned Features = 0;
 
   /* This function needs to run just once.  */
   if (__cpu_model.__cpu_vendor)
@@ -758,9 +559,7 @@
     return -1;
 
   /* Assume cpuid insn present. Run in level 0 to get vendor id. */
-  getX86CpuIDAndInfo(0, &MaxLeaf, &Vendor, &ECX, &EDX);
-
-  if (MaxLeaf < 1) {
+  if (getX86CpuIDAndInfo(0, &MaxLeaf, &Vendor, &ECX, &EDX) || MaxLeaf < 1) {
     __cpu_model.__cpu_vendor = VENDOR_OTHER;
     return -1;
   }
@@ -769,7 +568,7 @@
   Brand_id = EBX & 0xff;
 
   /* Find available features. */
-  Features = getAvailableFeatures(ECX, EDX, MaxLeaf);
+  getAvailableFeatures(ECX, EDX, MaxLeaf, &Features);
   __cpu_model.__cpu_features[0] = Features;
 
   if (Vendor == SIG_INTEL) {
diff --git a/lib/builtins/divdf3.c b/lib/builtins/divdf3.c
index ab44c2b..492e32b 100644
--- a/lib/builtins/divdf3.c
+++ b/lib/builtins/divdf3.c
@@ -19,8 +19,6 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(ddiv, divdf3)
-
 COMPILER_RT_ABI fp_t
 __divdf3(fp_t a, fp_t b) {
     
@@ -183,3 +181,10 @@
         return result;
     }
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_ddiv(fp_t a, fp_t b) {
+  return __divdf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/divsf3.c b/lib/builtins/divsf3.c
index de2e376..aa6289a 100644
--- a/lib/builtins/divsf3.c
+++ b/lib/builtins/divsf3.c
@@ -19,8 +19,6 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(fdiv, divsf3)
-
 COMPILER_RT_ABI fp_t
 __divsf3(fp_t a, fp_t b) {
     
@@ -167,3 +165,10 @@
         return fromRep(absResult | quotientSign);
     }
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_fdiv(fp_t a, fp_t b) {
+  return __divsf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/divsi3.c b/lib/builtins/divsi3.c
index bab4aef..3852e39 100644
--- a/lib/builtins/divsi3.c
+++ b/lib/builtins/divsi3.c
@@ -16,8 +16,6 @@
 
 /* Returns: a / b */
 
-ARM_EABI_FNALIAS(idiv, divsi3)
-
 COMPILER_RT_ABI si_int
 __divsi3(si_int a, si_int b)
 {
@@ -35,3 +33,10 @@
      */
     return ((su_int)a/(su_int)b ^ s_a) - s_a;    /* negate if s_a == -1 */
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI si_int __aeabi_idiv(si_int a, si_int b) {
+  return __divsi3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/divtc3.c b/lib/builtins/divtc3.c
index 04693df..16e538b 100644
--- a/lib/builtins/divtc3.c
+++ b/lib/builtins/divtc3.c
@@ -17,7 +17,7 @@
 
 /* Returns: the quotient of (a + ib) / (c + id) */
 
-COMPILER_RT_ABI long double _Complex
+COMPILER_RT_ABI Lcomplex
 __divtc3(long double __a, long double __b, long double __c, long double __d)
 {
     int __ilogbw = 0;
@@ -29,31 +29,31 @@
         __d = crt_scalbnl(__d, -__ilogbw);
     }
     long double __denom = __c * __c + __d * __d;
-    long double _Complex z;
-    __real__ z = crt_scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
-    __imag__ z = crt_scalbnl((__b * __c - __a * __d) / __denom, -__ilogbw);
-    if (crt_isnan(__real__ z) && crt_isnan(__imag__ z))
+    Lcomplex z;
+    COMPLEX_REAL(z) = crt_scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
+    COMPLEX_IMAGINARY(z) = crt_scalbnl((__b * __c - __a * __d) / __denom, -__ilogbw);
+    if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
     {
         if ((__denom == 0.0) && (!crt_isnan(__a) || !crt_isnan(__b)))
         {
-            __real__ z = crt_copysignl(CRT_INFINITY, __c) * __a;
-            __imag__ z = crt_copysignl(CRT_INFINITY, __c) * __b;
+            COMPLEX_REAL(z) = crt_copysignl(CRT_INFINITY, __c) * __a;
+            COMPLEX_IMAGINARY(z) = crt_copysignl(CRT_INFINITY, __c) * __b;
         }
         else if ((crt_isinf(__a) || crt_isinf(__b)) &&
                  crt_isfinite(__c) && crt_isfinite(__d))
         {
             __a = crt_copysignl(crt_isinf(__a) ? 1.0 : 0.0, __a);
             __b = crt_copysignl(crt_isinf(__b) ? 1.0 : 0.0, __b);
-            __real__ z = CRT_INFINITY * (__a * __c + __b * __d);
-            __imag__ z = CRT_INFINITY * (__b * __c - __a * __d);
+            COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c + __b * __d);
+            COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__b * __c - __a * __d);
         }
         else if (crt_isinf(__logbw) && __logbw > 0.0 &&
                  crt_isfinite(__a) && crt_isfinite(__b))
         {
             __c = crt_copysignl(crt_isinf(__c) ? 1.0 : 0.0, __c);
             __d = crt_copysignl(crt_isinf(__d) ? 1.0 : 0.0, __d);
-            __real__ z = 0.0 * (__a * __c + __b * __d);
-            __imag__ z = 0.0 * (__b * __c - __a * __d);
+            COMPLEX_REAL(z) = 0.0 * (__a * __c + __b * __d);
+            COMPLEX_IMAGINARY(z) = 0.0 * (__b * __c - __a * __d);
         }
     }
     return z;
diff --git a/lib/builtins/emutls.c b/lib/builtins/emutls.c
index eccbf53..12aad3a 100644
--- a/lib/builtins/emutls.c
+++ b/lib/builtins/emutls.c
@@ -7,7 +7,6 @@
  *
  * ===----------------------------------------------------------------------===
  */
-#include <pthread.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
@@ -15,6 +14,23 @@
 #include "int_lib.h"
 #include "int_util.h"
 
+typedef struct emutls_address_array {
+    uintptr_t size;  /* number of elements in the 'data' array */
+    void* data[];
+} emutls_address_array;
+
+static void emutls_shutdown(emutls_address_array *array);
+
+#ifndef _WIN32
+
+#include <pthread.h>
+
+static pthread_mutex_t emutls_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_key_t emutls_pthread_key;
+
+typedef unsigned int gcc_word __attribute__((mode(word)));
+typedef unsigned int gcc_pointer __attribute__((mode(pointer)));
+
 /* Default is not to use posix_memalign, so systems like Android
  * can use thread local data without heavier POSIX memory allocators.
  */
@@ -22,26 +38,6 @@
 #define EMUTLS_USE_POSIX_MEMALIGN 0
 #endif
 
-/* For every TLS variable xyz,
- * there is one __emutls_control variable named __emutls_v.xyz.
- * If xyz has non-zero initial value, __emutls_v.xyz's "value"
- * will point to __emutls_t.xyz, which has the initial value.
- */
-typedef unsigned int gcc_word __attribute__((mode(word)));
-typedef struct __emutls_control {
-    /* Must use gcc_word here, instead of size_t, to match GCC.  When
-       gcc_word is larger than size_t, the upper extra bits are all
-       zeros.  We can use variables of size_t to operate on size and
-       align.  */
-    gcc_word size;  /* size of the object in bytes */
-    gcc_word align;  /* alignment of the object in bytes */
-    union {
-        uintptr_t index;  /* data[index-1] is the object address */
-        void* address;  /* object address, when in single thread env */
-    } object;
-    void* value;  /* null or non-zero initial value for the object */
-} __emutls_control;
-
 static __inline void *emutls_memalign_alloc(size_t align, size_t size) {
     void *base;
 #if EMUTLS_USE_POSIX_MEMALIGN
@@ -50,7 +46,7 @@
 #else
     #define EXTRA_ALIGN_PTR_BYTES (align - 1 + sizeof(void*))
     char* object;
-    if ((object = malloc(EXTRA_ALIGN_PTR_BYTES + size)) == NULL)
+    if ((object = (char*)malloc(EXTRA_ALIGN_PTR_BYTES + size)) == NULL)
         abort();
     base = (void*)(((uintptr_t)(object + EXTRA_ALIGN_PTR_BYTES))
                     & ~(uintptr_t)(align - 1));
@@ -69,10 +65,207 @@
 #endif
 }
 
+static void emutls_key_destructor(void* ptr) {
+    emutls_shutdown((emutls_address_array*)ptr);
+    free(ptr);
+}
+
+static __inline void emutls_init(void) {
+    if (pthread_key_create(&emutls_pthread_key, emutls_key_destructor) != 0)
+        abort();
+}
+
+static __inline void emutls_init_once(void) {
+    static pthread_once_t once = PTHREAD_ONCE_INIT;
+    pthread_once(&once, emutls_init);
+}
+
+static __inline void emutls_lock() {
+    pthread_mutex_lock(&emutls_mutex);
+}
+
+static __inline void emutls_unlock() {
+    pthread_mutex_unlock(&emutls_mutex);
+}
+
+static __inline void emutls_setspecific(emutls_address_array *value) {
+    pthread_setspecific(emutls_pthread_key, (void*) value);
+}
+
+static __inline emutls_address_array* emutls_getspecific() {
+    return (emutls_address_array*) pthread_getspecific(emutls_pthread_key);
+}
+
+#else
+
+#include <windows.h>
+#include <malloc.h>
+#include <stdio.h>
+#include <assert.h>
+#include <immintrin.h>
+
+static LPCRITICAL_SECTION emutls_mutex;
+static DWORD emutls_tls_index = TLS_OUT_OF_INDEXES;
+
+typedef uintptr_t gcc_word;
+typedef void * gcc_pointer;
+
+static void win_error(DWORD last_err, const char *hint) {
+    char *buffer = NULL;
+    if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                       FORMAT_MESSAGE_FROM_SYSTEM |
+                       FORMAT_MESSAGE_MAX_WIDTH_MASK,
+                       NULL, last_err, 0, (LPSTR)&buffer, 1, NULL)) {
+        fprintf(stderr, "Windows error: %s\n", buffer);
+    } else {
+        fprintf(stderr, "Unkown Windows error: %s\n", hint);
+    }
+    LocalFree(buffer);
+}
+
+static __inline void win_abort(DWORD last_err, const char *hint) {
+    win_error(last_err, hint);
+    abort();
+}
+
+static __inline void *emutls_memalign_alloc(size_t align, size_t size) {
+    void *base = _aligned_malloc(size, align);
+    if (!base)
+        win_abort(GetLastError(), "_aligned_malloc");
+    return base;
+}
+
+static __inline void emutls_memalign_free(void *base) {
+    _aligned_free(base);
+}
+
+static void emutls_exit(void) {
+    if (emutls_mutex) {
+        DeleteCriticalSection(emutls_mutex);
+        _aligned_free(emutls_mutex);
+        emutls_mutex = NULL;
+    }
+    if (emutls_tls_index != TLS_OUT_OF_INDEXES) {
+        emutls_shutdown((emutls_address_array*)TlsGetValue(emutls_tls_index));
+        TlsFree(emutls_tls_index);
+        emutls_tls_index = TLS_OUT_OF_INDEXES;
+    }
+}
+
+#pragma warning (push)
+#pragma warning (disable : 4100)
+static BOOL CALLBACK emutls_init(PINIT_ONCE p0, PVOID p1, PVOID *p2) {
+    emutls_mutex = (LPCRITICAL_SECTION)_aligned_malloc(sizeof(CRITICAL_SECTION), 16);
+    if (!emutls_mutex) {
+        win_error(GetLastError(), "_aligned_malloc");
+        return FALSE;
+    }
+    InitializeCriticalSection(emutls_mutex);
+
+    emutls_tls_index = TlsAlloc();
+    if (emutls_tls_index == TLS_OUT_OF_INDEXES) {
+        emutls_exit();
+        win_error(GetLastError(), "TlsAlloc");
+        return FALSE;
+    }
+    atexit(&emutls_exit);
+    return TRUE;
+}
+
+static __inline void emutls_init_once(void) {
+    static INIT_ONCE once;
+    InitOnceExecuteOnce(&once, emutls_init, NULL, NULL);
+}
+
+static __inline void emutls_lock() {
+    EnterCriticalSection(emutls_mutex);
+}
+
+static __inline void emutls_unlock() {
+    LeaveCriticalSection(emutls_mutex);
+}
+
+static __inline void emutls_setspecific(emutls_address_array *value) {
+    if (TlsSetValue(emutls_tls_index, (LPVOID) value) == 0)
+        win_abort(GetLastError(), "TlsSetValue");
+}
+
+static __inline emutls_address_array* emutls_getspecific() {
+    LPVOID value = TlsGetValue(emutls_tls_index);
+    if (value == NULL) {
+        const DWORD err = GetLastError();
+        if (err != ERROR_SUCCESS)
+            win_abort(err, "TlsGetValue");
+    }
+    return (emutls_address_array*) value;
+}
+
+/* Provide atomic load/store functions for emutls_get_index if built with MSVC.
+ */
+#if !defined(__ATOMIC_RELEASE)
+
+enum { __ATOMIC_ACQUIRE = 2, __ATOMIC_RELEASE = 3 };
+
+static __inline uintptr_t __atomic_load_n(void *ptr, unsigned type) {
+    assert(type == __ATOMIC_ACQUIRE);
+#ifdef _WIN64
+    return (uintptr_t) _load_be_u64(ptr);
+#else
+    return (uintptr_t) _load_be_u32(ptr);
+#endif
+}
+
+static __inline void __atomic_store_n(void *ptr, uintptr_t val, unsigned type) {
+    assert(type == __ATOMIC_RELEASE);
+#ifdef _WIN64
+    _store_be_u64(ptr, val);
+#else
+    _store_be_u32(ptr, val);
+#endif
+}
+
+#endif
+
+#pragma warning (pop)
+
+#endif
+
+static size_t emutls_num_object = 0;  /* number of allocated TLS objects */
+
+/* Free the allocated TLS data
+ */
+static void emutls_shutdown(emutls_address_array *array) {
+    if (array) {
+        uintptr_t i;
+        for (i = 0; i < array->size; ++i) {
+            if (array->data[i])
+                emutls_memalign_free(array->data[i]);
+        }
+    }
+}
+
+/* For every TLS variable xyz,
+ * there is one __emutls_control variable named __emutls_v.xyz.
+ * If xyz has non-zero initial value, __emutls_v.xyz's "value"
+ * will point to __emutls_t.xyz, which has the initial value.
+ */
+typedef struct __emutls_control {
+    /* Must use gcc_word here, instead of size_t, to match GCC.  When
+       gcc_word is larger than size_t, the upper extra bits are all
+       zeros.  We can use variables of size_t to operate on size and
+       align.  */
+    gcc_word size;  /* size of the object in bytes */
+    gcc_word align;  /* alignment of the object in bytes */
+    union {
+        uintptr_t index;  /* data[index-1] is the object address */
+        void* address;  /* object address, when in single thread env */
+    } object;
+    void* value;  /* null or non-zero initial value for the object */
+} __emutls_control;
+
 /* Emulated TLS objects are always allocated at run-time. */
 static __inline void *emutls_allocate_object(__emutls_control *control) {
     /* Use standard C types, check with gcc's emutls.o. */
-    typedef unsigned int gcc_pointer __attribute__((mode(pointer)));
     COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(gcc_pointer));
     COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(void*));
 
@@ -93,45 +286,19 @@
     return base;
 }
 
-static pthread_mutex_t emutls_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static size_t emutls_num_object = 0;  /* number of allocated TLS objects */
-
-typedef struct emutls_address_array {
-    uintptr_t size;  /* number of elements in the 'data' array */
-    void* data[];
-} emutls_address_array;
-
-static pthread_key_t emutls_pthread_key;
-
-static void emutls_key_destructor(void* ptr) {
-    emutls_address_array* array = (emutls_address_array*)ptr;
-    uintptr_t i;
-    for (i = 0; i < array->size; ++i) {
-        if (array->data[i])
-            emutls_memalign_free(array->data[i]);
-    }
-    free(ptr);
-}
-
-static void emutls_init(void) {
-    if (pthread_key_create(&emutls_pthread_key, emutls_key_destructor) != 0)
-        abort();
-}
 
 /* Returns control->object.index; set index if not allocated yet. */
 static __inline uintptr_t emutls_get_index(__emutls_control *control) {
     uintptr_t index = __atomic_load_n(&control->object.index, __ATOMIC_ACQUIRE);
     if (!index) {
-        static pthread_once_t once = PTHREAD_ONCE_INIT;
-        pthread_once(&once, emutls_init);
-        pthread_mutex_lock(&emutls_mutex);
+        emutls_init_once();
+        emutls_lock();
         index = control->object.index;
         if (!index) {
             index = ++emutls_num_object;
             __atomic_store_n(&control->object.index, index, __ATOMIC_RELEASE);
         }
-        pthread_mutex_unlock(&emutls_mutex);
+        emutls_unlock();
     }
     return index;
 }
@@ -142,7 +309,7 @@
     if (array == NULL)
         abort();
     array->size = size;
-    pthread_setspecific(emutls_pthread_key, (void*)array);
+    emutls_setspecific(array);
 }
 
 /* Returns the new 'data' array size, number of elements,
@@ -156,22 +323,29 @@
     return ((index + 1 + 15) & ~((uintptr_t)15)) - 1;
 }
 
+/* Returns the size in bytes required for an emutls_address_array with
+ * N number of elements for data field.
+ */
+static __inline uintptr_t emutls_asize(uintptr_t N) {
+    return N * sizeof(void *) + sizeof(emutls_address_array);
+}
+
 /* Returns the thread local emutls_address_array.
  * Extends its size if necessary to hold address at index.
  */
 static __inline emutls_address_array *
 emutls_get_address_array(uintptr_t index) {
-    emutls_address_array* array = pthread_getspecific(emutls_pthread_key);
+    emutls_address_array* array = emutls_getspecific();
     if (array == NULL) {
         uintptr_t new_size = emutls_new_data_array_size(index);
-        array = malloc(new_size * sizeof(void *) + sizeof(emutls_address_array));
+        array = (emutls_address_array*) malloc(emutls_asize(new_size));
         if (array)
             memset(array->data, 0, new_size * sizeof(void*));
         emutls_check_array_set_size(array, new_size);
     } else if (index > array->size) {
         uintptr_t orig_size = array->size;
         uintptr_t new_size = emutls_new_data_array_size(index);
-        array = realloc(array, new_size * sizeof(void *) + sizeof(emutls_address_array));
+        array = (emutls_address_array*) realloc(array, emutls_asize(new_size));
         if (array)
             memset(array->data + orig_size, 0,
                    (new_size - orig_size) * sizeof(void*));
@@ -182,8 +356,8 @@
 
 void* __emutls_get_address(__emutls_control* control) {
     uintptr_t index = emutls_get_index(control);
-    emutls_address_array* array = emutls_get_address_array(index);
-    if (array->data[index - 1] == NULL)
-        array->data[index - 1] = emutls_allocate_object(control);
-    return array->data[index - 1];
+    emutls_address_array* array = emutls_get_address_array(index--);
+    if (array->data[index] == NULL)
+        array->data[index] = emutls_allocate_object(control);
+    return array->data[index];
 }
diff --git a/lib/builtins/extendhfsf2.c b/lib/builtins/extendhfsf2.c
index 27115a4..e7d9fde 100644
--- a/lib/builtins/extendhfsf2.c
+++ b/lib/builtins/extendhfsf2.c
@@ -12,8 +12,6 @@
 #define DST_SINGLE
 #include "fp_extend_impl.inc"
 
-ARM_EABI_FNALIAS(h2f, extendhfsf2)
-
 // Use a forwarding definition and noinline to implement a poor man's alias,
 // as there isn't a good cross-platform way of defining one.
 COMPILER_RT_ABI NOINLINE float __extendhfsf2(uint16_t a) {
@@ -23,3 +21,10 @@
 COMPILER_RT_ABI float __gnu_h2f_ieee(uint16_t a) {
     return __extendhfsf2(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI float __aeabi_h2f(uint16_t a) {
+  return __extendhfsf2(a);
+}
+#endif
+
diff --git a/lib/builtins/extendsfdf2.c b/lib/builtins/extendsfdf2.c
index 7a267c2..b9e7a74 100644
--- a/lib/builtins/extendsfdf2.c
+++ b/lib/builtins/extendsfdf2.c
@@ -12,8 +12,13 @@
 #define DST_DOUBLE
 #include "fp_extend_impl.inc"
 
-ARM_EABI_FNALIAS(f2d, extendsfdf2)
-
 COMPILER_RT_ABI double __extendsfdf2(float a) {
     return __extendXfYf2__(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI double __aeabi_f2d(float a) {
+  return __extendsfdf2(a);
+}
+#endif
+
diff --git a/lib/builtins/ffssi2.c b/lib/builtins/ffssi2.c
new file mode 100644
index 0000000..e5180ef
--- /dev/null
+++ b/lib/builtins/ffssi2.c
@@ -0,0 +1,29 @@
+/* ===-- ffssi2.c - Implement __ffssi2 -------------------------------------===
+ *
+ *                     The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements __ffssi2 for the compiler_rt library.
+ *
+ * ===----------------------------------------------------------------------===
+ */
+
+#include "int_lib.h"
+
+/* Returns: the index of the least significant 1-bit in a, or
+ * the value zero if a is zero. The least significant bit is index one.
+ */
+
+COMPILER_RT_ABI si_int
+__ffssi2(si_int a)
+{
+    if (a == 0)
+    {
+        return 0;
+    }
+    return __builtin_ctz(a) + 1;
+}
diff --git a/lib/builtins/fixdfdi.c b/lib/builtins/fixdfdi.c
index 14283ef..31d76df 100644
--- a/lib/builtins/fixdfdi.c
+++ b/lib/builtins/fixdfdi.c
@@ -10,7 +10,6 @@
 
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
-ARM_EABI_FNALIAS(d2lz, fixdfdi)
 
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; can set the invalid
@@ -44,3 +43,15 @@
 }
 
 #endif
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI di_int
+#if defined(__SOFT_FP__)
+__aeabi_d2lz(fp_t a) {
+#else
+__aeabi_d2lz(double a) {
+#endif
+  return __fixdfdi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixdfsi.c b/lib/builtins/fixdfsi.c
index 704e65b..fc316dc 100644
--- a/lib/builtins/fixdfsi.c
+++ b/lib/builtins/fixdfsi.c
@@ -14,9 +14,14 @@
 typedef su_int fixuint_t;
 #include "fp_fixint_impl.inc"
 
-ARM_EABI_FNALIAS(d2iz, fixdfsi)
-
 COMPILER_RT_ABI si_int
 __fixdfsi(fp_t a) {
     return __fixint(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI si_int __aeabi_d2iz(fp_t a) {
+  return __fixdfsi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixsfdi.c b/lib/builtins/fixsfdi.c
index fab47e2..c434736 100644
--- a/lib/builtins/fixsfdi.c
+++ b/lib/builtins/fixsfdi.c
@@ -11,8 +11,6 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(f2lz, fixsfdi)
-
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; can set the invalid
  * flag as a side-effect of computation.
@@ -45,3 +43,15 @@
 }
 
 #endif
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI di_int
+#if defined(__SOFT_FP__)
+__aeabi_f2lz(fp_t a) {
+#else
+__aeabi_f2lz(float a) {
+#endif
+  return __fixsfdi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixsfsi.c b/lib/builtins/fixsfsi.c
index f045536..3276df9 100644
--- a/lib/builtins/fixsfsi.c
+++ b/lib/builtins/fixsfsi.c
@@ -14,9 +14,14 @@
 typedef su_int fixuint_t;
 #include "fp_fixint_impl.inc"
 
-ARM_EABI_FNALIAS(f2iz, fixsfsi)
-
 COMPILER_RT_ABI si_int
 __fixsfsi(fp_t a) {
     return __fixint(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI si_int __aeabi_f2iz(fp_t a) {
+  return __fixsfsi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixunsdfdi.c b/lib/builtins/fixunsdfdi.c
index 4b0bc9e..b734409 100644
--- a/lib/builtins/fixunsdfdi.c
+++ b/lib/builtins/fixunsdfdi.c
@@ -11,8 +11,6 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(d2ulz, fixunsdfdi)
-
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; can set the invalid
  * flag as a side-effect of computation.
@@ -42,3 +40,15 @@
 }
 
 #endif
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI du_int
+#if defined(__SOFT_FP__)
+__aeabi_d2ulz(fp_t a) {
+#else
+__aeabi_d2ulz(double a) {
+#endif
+  return __fixunsdfdi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixunsdfsi.c b/lib/builtins/fixunsdfsi.c
index 232d342..bb3d8e0 100644
--- a/lib/builtins/fixunsdfsi.c
+++ b/lib/builtins/fixunsdfsi.c
@@ -13,9 +13,14 @@
 typedef su_int fixuint_t;
 #include "fp_fixuint_impl.inc"
 
-ARM_EABI_FNALIAS(d2uiz, fixunsdfsi)
-
 COMPILER_RT_ABI su_int
 __fixunsdfsi(fp_t a) {
     return __fixuint(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI su_int __aeabi_d2uiz(fp_t a) {
+  return __fixunsdfsi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixunssfdi.c b/lib/builtins/fixunssfdi.c
index f8ebab8..5d92245 100644
--- a/lib/builtins/fixunssfdi.c
+++ b/lib/builtins/fixunssfdi.c
@@ -11,8 +11,6 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(f2ulz, fixunssfdi)
-
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; can set the invalid
  * flag as a side-effect of computation.
@@ -43,3 +41,15 @@
 }
 
 #endif
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI du_int
+#if defined(__SOFT_FP__)
+__aeabi_f2ulz(fp_t a) {
+#else
+__aeabi_f2ulz(float a) {
+#endif
+  return __fixunssfdi(a);
+}
+#endif
+
diff --git a/lib/builtins/fixunssfsi.c b/lib/builtins/fixunssfsi.c
index cc2b05b..91d5e8a 100644
--- a/lib/builtins/fixunssfsi.c
+++ b/lib/builtins/fixunssfsi.c
@@ -17,9 +17,14 @@
 typedef su_int fixuint_t;
 #include "fp_fixuint_impl.inc"
 
-ARM_EABI_FNALIAS(f2uiz, fixunssfsi)
-
 COMPILER_RT_ABI su_int
 __fixunssfsi(fp_t a) {
     return __fixuint(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI su_int __aeabi_f2uiz(fp_t a) {
+  return __fixunssfsi(a);
+}
+#endif
+
diff --git a/lib/builtins/floatdidf.c b/lib/builtins/floatdidf.c
index 2b023ad..681fece 100644
--- a/lib/builtins/floatdidf.c
+++ b/lib/builtins/floatdidf.c
@@ -22,8 +22,6 @@
 
 /* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
 
-ARM_EABI_FNALIAS(l2d, floatdidf)
-
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; we'll set the inexact flag
  * as a side-effect of this computation.
@@ -105,3 +103,10 @@
     return fb.f;
 }
 #endif
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI double __aeabi_l2d(di_int a) {
+  return __floatdidf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatdisf.c b/lib/builtins/floatdisf.c
index 3e47580..dd54816 100644
--- a/lib/builtins/floatdisf.c
+++ b/lib/builtins/floatdisf.c
@@ -22,8 +22,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(l2f, floatdisf)
-
 COMPILER_RT_ABI float
 __floatdisf(di_int a)
 {
@@ -78,3 +76,10 @@
            ((su_int)a & 0x007FFFFF);   /* mantissa */
     return fb.f;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI float __aeabi_l2f(di_int a) {
+  return __floatdisf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatsidf.c b/lib/builtins/floatsidf.c
index 1cf99b7..2ae395b 100644
--- a/lib/builtins/floatsidf.c
+++ b/lib/builtins/floatsidf.c
@@ -18,8 +18,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(i2d, floatsidf)
-
 COMPILER_RT_ABI fp_t
 __floatsidf(int a) {
     
@@ -51,3 +49,10 @@
     // Insert the sign bit and return
     return fromRep(result | sign);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_i2d(int a) {
+  return __floatsidf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatsisf.c b/lib/builtins/floatsisf.c
index 467dd1d..08891fc 100644
--- a/lib/builtins/floatsisf.c
+++ b/lib/builtins/floatsisf.c
@@ -18,8 +18,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(i2f, floatsisf)
-
 COMPILER_RT_ABI fp_t
 __floatsisf(int a) {
     
@@ -57,3 +55,10 @@
     // Insert the sign bit and return
     return fromRep(result | sign);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_i2f(int a) {
+  return __floatsisf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatundidf.c b/lib/builtins/floatundidf.c
index cfd3a7a..6c1a931 100644
--- a/lib/builtins/floatundidf.c
+++ b/lib/builtins/floatundidf.c
@@ -22,8 +22,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(ul2d, floatundidf)
-
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; we'll set the inexact flag
  * as a side-effect of this computation.
@@ -104,3 +102,10 @@
     return fb.f;
 }
 #endif
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI double __aeabi_ul2d(du_int a) {
+  return __floatundidf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatundisf.c b/lib/builtins/floatundisf.c
index 713a44a..86841a7 100644
--- a/lib/builtins/floatundisf.c
+++ b/lib/builtins/floatundisf.c
@@ -22,8 +22,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(ul2f, floatundisf)
-
 COMPILER_RT_ABI float
 __floatundisf(du_int a)
 {
@@ -75,3 +73,10 @@
            ((su_int)a & 0x007FFFFF);  /* mantissa */
     return fb.f;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI float __aeabi_ul2f(du_int a) {
+  return __floatundisf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatunsidf.c b/lib/builtins/floatunsidf.c
index 445e180..8d48071 100644
--- a/lib/builtins/floatunsidf.c
+++ b/lib/builtins/floatunsidf.c
@@ -18,8 +18,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(ui2d, floatunsidf)
-
 COMPILER_RT_ABI fp_t
 __floatunsidf(unsigned int a) {
     
@@ -40,3 +38,10 @@
     result += (rep_t)(exponent + exponentBias) << significandBits;
     return fromRep(result);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_ui2d(unsigned int a) {
+  return __floatunsidf(a);
+}
+#endif
+
diff --git a/lib/builtins/floatunsisf.c b/lib/builtins/floatunsisf.c
index ea6f161..f194c04 100644
--- a/lib/builtins/floatunsisf.c
+++ b/lib/builtins/floatunsisf.c
@@ -18,8 +18,6 @@
 
 #include "int_lib.h"
 
-ARM_EABI_FNALIAS(ui2f, floatunsisf)
-
 COMPILER_RT_ABI fp_t
 __floatunsisf(unsigned int a) {
     
@@ -48,3 +46,10 @@
     result += (rep_t)(exponent + exponentBias) << significandBits;
     return fromRep(result);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_ui2f(unsigned int a) {
+  return __floatunsisf(a);
+}
+#endif
+
diff --git a/lib/builtins/int_lib.h b/lib/builtins/int_lib.h
index 39eee18..9a8092d 100644
--- a/lib/builtins/int_lib.h
+++ b/lib/builtins/int_lib.h
@@ -30,14 +30,17 @@
 /* ABI macro definitions */
 
 #if __ARM_EABI__
-# define ARM_EABI_FNALIAS(aeabi_name, name)         \
-  void __aeabi_##aeabi_name() __attribute__((alias("__" #name)));
-# define COMPILER_RT_ABI __attribute__((pcs("aapcs")))
+# ifdef COMPILER_RT_ARMHF_TARGET
+#   define COMPILER_RT_ABI
+# else
+#   define COMPILER_RT_ABI __attribute__((__pcs__("aapcs")))
+# endif
 #else
-# define ARM_EABI_FNALIAS(aeabi_name, name)
 # define COMPILER_RT_ABI
 #endif
 
+#define AEABI_RTABI __attribute__((__pcs__("aapcs")))
+
 #ifdef _MSC_VER
 #define ALWAYS_INLINE __forceinline
 #define NOINLINE __declspec(noinline)
diff --git a/lib/builtins/int_types.h b/lib/builtins/int_types.h
index 660385e..a92238c 100644
--- a/lib/builtins/int_types.h
+++ b/lib/builtins/int_types.h
@@ -60,9 +60,7 @@
     }s;
 } udwords;
 
-/* MIPS64 issue: PR 20098 */
-#if (defined(__LP64__) || defined(__wasm__)) && \
-    !(defined(__mips__) && defined(__clang__))
+#if (defined(__LP64__) || defined(__wasm__) || defined(__mips64))
 #define CRT_HAS_128BIT
 #endif
 
diff --git a/lib/builtins/int_util.c b/lib/builtins/int_util.c
index 420d1e2..de87410 100644
--- a/lib/builtins/int_util.c
+++ b/lib/builtins/int_util.c
@@ -45,6 +45,16 @@
   __assert_rtn(function, file, line, "libcompiler_rt abort");
 }
 
+#elif __Fuchsia__
+
+#ifndef _WIN32
+__attribute__((weak))
+__attribute__((visibility("hidden")))
+#endif
+void compilerrt_abort_impl(const char *file, int line, const char *function) {
+  __builtin_trap();
+}
+
 #else
 
 /* Get the system definition of abort() */
diff --git a/lib/builtins/lshrdi3.c b/lib/builtins/lshrdi3.c
index 6b1ea92..becbbef 100644
--- a/lib/builtins/lshrdi3.c
+++ b/lib/builtins/lshrdi3.c
@@ -18,8 +18,6 @@
 
 /* Precondition:  0 <= b < bits_in_dword */
 
-ARM_EABI_FNALIAS(llsr, lshrdi3)
-
 COMPILER_RT_ABI di_int
 __lshrdi3(di_int a, si_int b)
 {
@@ -41,3 +39,10 @@
     }
     return result.all;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI di_int __aeabi_llsr(di_int a, si_int b) {
+  return __lshrdi3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/muldf3.c b/lib/builtins/muldf3.c
index 1eb7338..59a6019 100644
--- a/lib/builtins/muldf3.c
+++ b/lib/builtins/muldf3.c
@@ -15,8 +15,13 @@
 #define DOUBLE_PRECISION
 #include "fp_mul_impl.inc"
 
-ARM_EABI_FNALIAS(dmul, muldf3)
-
 COMPILER_RT_ABI fp_t __muldf3(fp_t a, fp_t b) {
     return __mulXf3__(a, b);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_dmul(fp_t a, fp_t b) {
+  return __muldf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/muldi3.c b/lib/builtins/muldi3.c
index 2dae44c..6818a9e 100644
--- a/lib/builtins/muldi3.c
+++ b/lib/builtins/muldi3.c
@@ -40,8 +40,6 @@
 
 /* Returns: a * b */
 
-ARM_EABI_FNALIAS(lmul, muldi3)
-
 COMPILER_RT_ABI di_int
 __muldi3(di_int a, di_int b)
 {
@@ -54,3 +52,10 @@
     r.s.high += x.s.high * y.s.low + x.s.low * y.s.high;
     return r.all;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI di_int __aeabi_lmul(di_int a, di_int b) {
+  return __muldi3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/mulsf3.c b/lib/builtins/mulsf3.c
index 478b3bc..f141af1 100644
--- a/lib/builtins/mulsf3.c
+++ b/lib/builtins/mulsf3.c
@@ -15,8 +15,13 @@
 #define SINGLE_PRECISION
 #include "fp_mul_impl.inc"
 
-ARM_EABI_FNALIAS(fmul, mulsf3)
-
 COMPILER_RT_ABI fp_t __mulsf3(fp_t a, fp_t b) {
     return __mulXf3__(a, b);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_fmul(fp_t a, fp_t b) {
+  return __mulsf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/negdf2.c b/lib/builtins/negdf2.c
index d634b42..5e2544c 100644
--- a/lib/builtins/negdf2.c
+++ b/lib/builtins/negdf2.c
@@ -14,9 +14,14 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(dneg, negdf2)
-
 COMPILER_RT_ABI fp_t
 __negdf2(fp_t a) {
     return fromRep(toRep(a) ^ signBit);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_dneg(fp_t a) {
+  return __negdf2(a);
+}
+#endif
+
diff --git a/lib/builtins/negsf2.c b/lib/builtins/negsf2.c
index 29c17be..f90b343 100644
--- a/lib/builtins/negsf2.c
+++ b/lib/builtins/negsf2.c
@@ -14,9 +14,14 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(fneg, negsf2)
-
 COMPILER_RT_ABI fp_t
 __negsf2(fp_t a) {
     return fromRep(toRep(a) ^ signBit);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_fneg(fp_t a) {
+  return __negsf2(a);
+}
+#endif
+
diff --git a/lib/builtins/os_version_check.c b/lib/builtins/os_version_check.c
index 711ba60..74ade2f 100644
--- a/lib/builtins/os_version_check.c
+++ b/lib/builtins/os_version_check.c
@@ -47,9 +47,12 @@
           RTLD_DEFAULT, "CFPropertyListCreateWithData");
   /* CFPropertyListCreateWithData was introduced only in macOS 10.6+, so it
    * will be NULL on earlier OS versions. */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
   typeof(CFPropertyListCreateFromXMLData) *CFPropertyListCreateFromXMLDataFunc =
       (typeof(CFPropertyListCreateFromXMLData) *)dlsym(
           RTLD_DEFAULT, "CFPropertyListCreateFromXMLData");
+#pragma clang diagnostic pop
   /* CFPropertyListCreateFromXMLDataFunc is deprecated in macOS 10.10, so it
    * might be NULL in future OS versions. */
   if (!CFPropertyListCreateWithDataFunc && !CFPropertyListCreateFromXMLDataFunc)
@@ -167,4 +170,9 @@
   return Subminor <= GlobalSubminor;
 }
 
+#else
+
+/* Silence an empty translation unit warning. */
+typedef int unused;
+
 #endif
diff --git a/lib/builtins/subdf3.c b/lib/builtins/subdf3.c
index 7a79e5e..38340df 100644
--- a/lib/builtins/subdf3.c
+++ b/lib/builtins/subdf3.c
@@ -15,11 +15,15 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(dsub, subdf3)
-
 // Subtraction; flip the sign bit of b and add.
 COMPILER_RT_ABI fp_t
 __subdf3(fp_t a, fp_t b) {
     return __adddf3(a, fromRep(toRep(b) ^ signBit));
 }
 
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_dsub(fp_t a, fp_t b) {
+  return __subdf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/subsf3.c b/lib/builtins/subsf3.c
index c3b8514..34276b1 100644
--- a/lib/builtins/subsf3.c
+++ b/lib/builtins/subsf3.c
@@ -15,11 +15,15 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
 
-ARM_EABI_FNALIAS(fsub, subsf3)
-
 // Subtraction; flip the sign bit of b and add.
 COMPILER_RT_ABI fp_t
 __subsf3(fp_t a, fp_t b) {
     return __addsf3(a, fromRep(toRep(b) ^ signBit));
 }
 
+#if defined(__ARM_EABI__)
+AEABI_RTABI fp_t __aeabi_fsub(fp_t a, fp_t b) {
+  return __subsf3(a, b);
+}
+#endif
+
diff --git a/lib/builtins/truncdfhf2.c b/lib/builtins/truncdfhf2.c
index 17195cd..4bb71aa 100644
--- a/lib/builtins/truncdfhf2.c
+++ b/lib/builtins/truncdfhf2.c
@@ -11,8 +11,13 @@
 #define DST_HALF
 #include "fp_trunc_impl.inc"
 
-ARM_EABI_FNALIAS(d2h, truncdfhf2)
-
 COMPILER_RT_ABI uint16_t __truncdfhf2(double a) {
     return __truncXfYf2__(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI uint16_t __aeabi_d2h(double a) {
+  return __truncdfhf2(a);
+}
+#endif
+
diff --git a/lib/builtins/truncdfsf2.c b/lib/builtins/truncdfsf2.c
index 46ec11d..8bf58bb 100644
--- a/lib/builtins/truncdfsf2.c
+++ b/lib/builtins/truncdfsf2.c
@@ -11,8 +11,13 @@
 #define DST_SINGLE
 #include "fp_trunc_impl.inc"
 
-ARM_EABI_FNALIAS(d2f, truncdfsf2)
-
 COMPILER_RT_ABI float __truncdfsf2(double a) {
     return __truncXfYf2__(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI float __aeabi_d2f(double a) {
+  return __truncdfsf2(a);
+}
+#endif
+
diff --git a/lib/builtins/truncsfhf2.c b/lib/builtins/truncsfhf2.c
index 9d61895..f6ce1fa 100644
--- a/lib/builtins/truncsfhf2.c
+++ b/lib/builtins/truncsfhf2.c
@@ -11,8 +11,6 @@
 #define DST_HALF
 #include "fp_trunc_impl.inc"
 
-ARM_EABI_FNALIAS(f2h, truncsfhf2)
-
 // Use a forwarding definition and noinline to implement a poor man's alias,
 // as there isn't a good cross-platform way of defining one.
 COMPILER_RT_ABI NOINLINE uint16_t __truncsfhf2(float a) {
@@ -22,3 +20,10 @@
 COMPILER_RT_ABI uint16_t __gnu_f2h_ieee(float a) {
     return __truncsfhf2(a);
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI uint16_t __aeabi_f2h(float a) {
+  return __truncsfhf2(a);
+}
+#endif
+
diff --git a/lib/builtins/udivsi3.c b/lib/builtins/udivsi3.c
index 5d0140c..8eccf10 100644
--- a/lib/builtins/udivsi3.c
+++ b/lib/builtins/udivsi3.c
@@ -18,8 +18,6 @@
 
 /* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
 
-ARM_EABI_FNALIAS(uidiv, udivsi3)
-
 /* This function should not call __divsi3! */
 COMPILER_RT_ABI su_int
 __udivsi3(su_int n, su_int d)
@@ -64,3 +62,10 @@
     q = (q << 1) | carry;
     return q;
 }
+
+#if defined(__ARM_EABI__)
+AEABI_RTABI su_int __aeabi_uidiv(su_int n, su_int d) {
+  return __udivsi3(n, d);
+}
+#endif
+
diff --git a/lib/builtins/x86_64/floatdidf.c b/lib/builtins/x86_64/floatdidf.c
index 388404e..dead0ed 100644
--- a/lib/builtins/x86_64/floatdidf.c
+++ b/lib/builtins/x86_64/floatdidf.c
@@ -4,7 +4,7 @@
 
 /* double __floatdidf(di_int a); */
 
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(_M_X64)
 
 #include "../int_lib.h"
 
diff --git a/lib/builtins/x86_64/floatdisf.c b/lib/builtins/x86_64/floatdisf.c
index 96c3728..99d5621 100644
--- a/lib/builtins/x86_64/floatdisf.c
+++ b/lib/builtins/x86_64/floatdisf.c
@@ -2,7 +2,7 @@
  * License. See LICENSE.TXT for details.
  */
 
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(_M_X64)
 
 #include "../int_lib.h"
 
diff --git a/lib/cfi/cfi.cc b/lib/cfi/cfi.cc
index d463ca8..f720230 100644
--- a/lib/cfi/cfi.cc
+++ b/lib/cfi/cfi.cc
@@ -188,12 +188,14 @@
     }
   }
   if (!dynamic) return 0;
-  uptr strtab = 0, symtab = 0;
+  uptr strtab = 0, symtab = 0, strsz = 0;
   for (const ElfW(Dyn) *p = dynamic; p->d_tag != PT_NULL; ++p) {
     if (p->d_tag == DT_SYMTAB)
       symtab = p->d_un.d_ptr;
     else if (p->d_tag == DT_STRTAB)
       strtab = p->d_un.d_ptr;
+    else if (p->d_tag == DT_STRSZ)
+      strsz = p->d_un.d_ptr;
   }
 
   if (symtab > strtab) {
@@ -209,7 +211,8 @@
     if (phdr->p_type == PT_LOAD) {
       uptr beg = info->dlpi_addr + phdr->p_vaddr;
       uptr end = beg + phdr->p_memsz;
-      if (strtab >= beg && strtab < end && symtab >= beg && symtab < end)
+      if (strtab >= beg && strtab + strsz < end && symtab >= beg &&
+          symtab < end)
         break;
     }
   }
@@ -222,9 +225,14 @@
 
   for (const ElfW(Sym) *p = (const ElfW(Sym) *)symtab; (ElfW(Addr))p < strtab;
        ++p) {
+    // There is no reliable way to find the end of the symbol table. In
+    // lld-produces files, there are other sections between symtab and strtab.
+    // Stop looking when the symbol name is not inside strtab.
+    if (p->st_name >= strsz) break;
     char *name = (char*)(strtab + p->st_name);
     if (strcmp(name, "__cfi_check") == 0) {
-      assert(p->st_info == ELF32_ST_INFO(STB_GLOBAL, STT_FUNC));
+      assert(p->st_info == ELF32_ST_INFO(STB_GLOBAL, STT_FUNC) ||
+             p->st_info == ELF32_ST_INFO(STB_WEAK, STT_FUNC));
       uptr addr = info->dlpi_addr + p->st_value;
       return addr;
     }
diff --git a/lib/cfi/cfi_blacklist.txt b/lib/cfi/cfi_blacklist.txt
index 1f0eeb3..cc111be 100644
--- a/lib/cfi/cfi_blacklist.txt
+++ b/lib/cfi/cfi_blacklist.txt
@@ -24,3 +24,8 @@
 # Windows C++ stdlib headers that contain bad unrelated casts.
 src:*xmemory0
 src:*xstddef
+
+# std::_Sp_counted_ptr_inplace::_Sp_counted_ptr_inplace() (libstdc++).
+# This ctor is used by std::make_shared and needs to cast to uninitialized T*
+# in order to call std::allocator_traits<T>::construct.
+fun:_ZNSt23_Sp_counted_ptr_inplace*
diff --git a/lib/dfsan/done_abilist.txt b/lib/dfsan/done_abilist.txt
index a00dc54..a560cd7 100644
--- a/lib/dfsan/done_abilist.txt
+++ b/lib/dfsan/done_abilist.txt
@@ -285,24 +285,8 @@
 fun:__sanitizer_cov_module_init=discard
 fun:__sanitizer_cov_with_check=uninstrumented
 fun:__sanitizer_cov_with_check=discard
-fun:__sanitizer_cov_indir_call16=uninstrumented
-fun:__sanitizer_cov_indir_call16=discard
-fun:__sanitizer_cov_indir_call16=uninstrumented
-fun:__sanitizer_cov_indir_call16=discard
-fun:__sanitizer_reset_coverage=uninstrumented
-fun:__sanitizer_reset_coverage=discard
 fun:__sanitizer_set_death_callback=uninstrumented
 fun:__sanitizer_set_death_callback=discard
-fun:__sanitizer_get_coverage_guards=uninstrumented
-fun:__sanitizer_get_coverage_guards=discard
-fun:__sanitizer_get_number_of_counters=uninstrumented
-fun:__sanitizer_get_number_of_counters=discard
-fun:__sanitizer_update_counter_bitset_and_clear_counters=uninstrumented
-fun:__sanitizer_update_counter_bitset_and_clear_counters=discard
-fun:__sanitizer_get_total_unique_coverage=uninstrumented
-fun:__sanitizer_get_total_unique_coverage=discard
-fun:__sanitizer_get_total_unique_coverage=uninstrumented
-fun:__sanitizer_get_total_unique_coverage=discard
 fun:__sanitizer_update_counter_bitset_and_clear_counters=uninstrumented
 fun:__sanitizer_update_counter_bitset_and_clear_counters=discard
 
diff --git a/lib/esan/esan_interceptors.cpp b/lib/esan/esan_interceptors.cpp
index 9ae5482..62fa13c 100644
--- a/lib/esan/esan_interceptors.cpp
+++ b/lib/esan/esan_interceptors.cpp
@@ -31,6 +31,8 @@
 // Get the per-platform defines for what is possible to intercept
 #include "sanitizer_common/sanitizer_platform_interceptors.h"
 
+DECLARE_REAL_AND_INTERCEPTOR(void *, malloc, uptr)
+
 // TODO(bruening): tsan disables several interceptors (getpwent, etc.) claiming
 // that interception is a perf hit: should we do the same?
 
@@ -304,20 +306,6 @@
   return REAL(unlink)(path);
 }
 
-INTERCEPTOR(uptr, fread, void *ptr, uptr size, uptr nmemb, void *f) {
-  void *ctx;
-  COMMON_INTERCEPTOR_ENTER(ctx, fread, ptr, size, nmemb, f);
-  COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size * nmemb);
-  return REAL(fread)(ptr, size, nmemb, f);
-}
-
-INTERCEPTOR(uptr, fwrite, const void *p, uptr size, uptr nmemb, void *f) {
-  void *ctx;
-  COMMON_INTERCEPTOR_ENTER(ctx, fwrite, p, size, nmemb, f);
-  COMMON_INTERCEPTOR_READ_RANGE(ctx, p, size * nmemb);
-  return REAL(fwrite)(p, size, nmemb, f);
-}
-
 INTERCEPTOR(int, puts, const char *s) {
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, puts, s);
diff --git a/lib/esan/working_set.cpp b/lib/esan/working_set.cpp
index f391119..e56902c 100644
--- a/lib/esan/working_set.cpp
+++ b/lib/esan/working_set.cpp
@@ -160,15 +160,16 @@
 static u32 computeWorkingSizeAndReset(u32 BitIdx) {
   u32 WorkingSetSize = 0;
   MemoryMappingLayout MemIter(true/*cache*/);
-  uptr Start, End, Prot;
-  while (MemIter.Next(&Start, &End, nullptr/*offs*/, nullptr/*file*/,
-                      0/*file size*/, &Prot)) {
-    VPrintf(4, "%s: considering %p-%p app=%d shadow=%d prot=%u\n",
-            __FUNCTION__, Start, End, Prot, isAppMem(Start),
-            isShadowMem(Start));
-    if (isShadowMem(Start) && (Prot & MemoryMappingLayout::kProtectionWrite)) {
-      VPrintf(3, "%s: walking %p-%p\n", __FUNCTION__, Start, End);
-      WorkingSetSize += countAndClearShadowValues(BitIdx, Start, End);
+  MemoryMappedSegment Segment;
+  while (MemIter.Next(&Segment)) {
+    VPrintf(4, "%s: considering %p-%p app=%d shadow=%d prot=%u\n", __FUNCTION__,
+            Segment.start, Segment.end, Segment.protection,
+            isAppMem(Segment.start), isShadowMem(Segment.start));
+    if (isShadowMem(Segment.start) && Segment.IsWritable()) {
+      VPrintf(3, "%s: walking %p-%p\n", __FUNCTION__, Segment.start,
+              Segment.end);
+      WorkingSetSize +=
+          countAndClearShadowValues(BitIdx, Segment.start, Segment.end);
     }
   }
   return WorkingSetSize;
diff --git a/lib/interception/interception_win.cc b/lib/interception/interception_win.cc
index 91abecf..b2902d5 100644
--- a/lib/interception/interception_win.cc
+++ b/lib/interception/interception_win.cc
@@ -477,7 +477,7 @@
   switch (*(u8*)address) {
     case 0xA1:  // A1 XX XX XX XX XX XX XX XX :
                 //   movabs eax, dword ptr ds:[XXXXXXXX]
-      return 8;
+      return 9;
   }
 
   switch (*(u16*)address) {
@@ -495,6 +495,11 @@
     case 0x5741:  // push r15
     case 0x9066:  // Two-byte NOP
       return 2;
+
+    case 0x058B:  // 8B 05 XX XX XX XX : mov eax, dword ptr [XX XX XX XX]
+      if (rel_offset)
+        *rel_offset = 2;
+      return 6;
   }
 
   switch (0x00FFFFFF & *(u32*)address) {
@@ -878,6 +883,8 @@
 
   IMAGE_DATA_DIRECTORY *export_directory =
       &headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
+  if (export_directory->Size == 0)
+    return 0;
   RVAPtr<IMAGE_EXPORT_DIRECTORY> exports(module,
                                          export_directory->VirtualAddress);
   RVAPtr<DWORD> functions(module, exports->AddressOfFunctions);
diff --git a/lib/interception/tests/interception_win_test.cc b/lib/interception/tests/interception_win_test.cc
index 684ee03..37ef994 100644
--- a/lib/interception/tests/interception_win_test.cc
+++ b/lib/interception/tests/interception_win_test.cc
@@ -170,6 +170,13 @@
     0x54,                                      // push    esp
 };
 
+#if SANITIZER_WINDOWS64
+u8 kLoadGlobalCode[] = {
+  0x8B, 0x05, 0x00, 0x00, 0x00, 0x00, // mov    eax [rip + global]
+  0xC3,                               // ret
+};
+#endif
+
 const u8 kUnpatchableCode1[] = {
     0xC3,                           // ret
 };
@@ -502,6 +509,10 @@
   EXPECT_TRUE(TestFunctionPatching(kPatchableCode4, override));
   EXPECT_TRUE(TestFunctionPatching(kPatchableCode5, override));
 
+#if SANITIZER_WINDOWS64
+  EXPECT_TRUE(TestFunctionPatching(kLoadGlobalCode, override));
+#endif
+
   EXPECT_FALSE(TestFunctionPatching(kUnpatchableCode1, override));
   EXPECT_FALSE(TestFunctionPatching(kUnpatchableCode2, override));
   EXPECT_FALSE(TestFunctionPatching(kUnpatchableCode3, override));
@@ -613,6 +624,13 @@
   EXPECT_FALSE(TestFunctionPatching(kUnpatchableCode6, override, prefix));
 }
 
+TEST(Interception, EmptyExportTable) {
+  // We try to get a pointer to a function from an executable that doesn't
+  // export any symbol (empty export table).
+  uptr FunPtr = InternalGetProcAddress((void *)GetModuleHandleA(0), "example");
+  EXPECT_EQ(0U, FunPtr);
+}
+
 }  // namespace __interception
 
 #endif  // SANITIZER_WINDOWS
diff --git a/lib/lsan/CMakeLists.txt b/lib/lsan/CMakeLists.txt
index b782f24..bd3a96f 100644
--- a/lib/lsan/CMakeLists.txt
+++ b/lib/lsan/CMakeLists.txt
@@ -5,12 +5,16 @@
 
 set(LSAN_COMMON_SOURCES
   lsan_common.cc
-  lsan_common_linux.cc)
+  lsan_common_linux.cc
+  lsan_common_mac.cc)
 
 set(LSAN_SOURCES
   lsan.cc
   lsan_allocator.cc
+  lsan_linux.cc
   lsan_interceptors.cc
+  lsan_mac.cc
+  lsan_malloc_mac.cc
   lsan_preinit.cc
   lsan_thread.cc)
 
@@ -24,16 +28,34 @@
 
 if(COMPILER_RT_HAS_LSAN)
   add_compiler_rt_component(lsan)
-  foreach(arch ${LSAN_SUPPORTED_ARCH})
+  if(APPLE)
+    add_weak_symbols("lsan" WEAK_SYMBOL_LINK_FLAGS)
+    add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)
+
     add_compiler_rt_runtime(clang_rt.lsan
-      STATIC
-      ARCHS ${arch}
+      SHARED
+      OS ${SANITIZER_COMMON_SUPPORTED_OS}
+      ARCHS ${LSAN_SUPPORTED_ARCH}
       SOURCES ${LSAN_SOURCES}
-              $<TARGET_OBJECTS:RTInterception.${arch}>
-              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
-              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
-              $<TARGET_OBJECTS:RTLSanCommon.${arch}>
+      OBJECT_LIBS RTLSanCommon
+                  RTInterception
+                  RTSanitizerCommon
+                  RTSanitizerCommonLibc
       CFLAGS ${LSAN_CFLAGS}
+      LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
       PARENT_TARGET lsan)
-  endforeach()
+  else()
+    foreach(arch ${LSAN_SUPPORTED_ARCH})
+      add_compiler_rt_runtime(clang_rt.lsan
+        STATIC
+        ARCHS ${arch}
+        SOURCES ${LSAN_SOURCES}
+                $<TARGET_OBJECTS:RTInterception.${arch}>
+                $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
+                $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
+                $<TARGET_OBJECTS:RTLSanCommon.${arch}>
+        CFLAGS ${LSAN_CFLAGS}
+        PARENT_TARGET lsan)
+    endforeach()
+  endif()
 endif()
diff --git a/lib/lsan/lsan.cc b/lib/lsan/lsan.cc
index c7c3429..6c4767d 100644
--- a/lib/lsan/lsan.cc
+++ b/lib/lsan/lsan.cc
@@ -76,6 +76,7 @@
   InitializeFlags();
   InitCommonLsan();
   InitializeAllocator();
+  ReplaceSystemMalloc();
   InitTlsSize();
   InitializeInterceptors();
   InitializeThreadRegistry();
diff --git a/lib/lsan/lsan.h b/lib/lsan/lsan.h
index ec5eb93..7446e95 100644
--- a/lib/lsan/lsan.h
+++ b/lib/lsan/lsan.h
@@ -38,9 +38,18 @@
   GET_STACK_TRACE(__sanitizer::common_flags()->malloc_context_size, \
                   common_flags()->fast_unwind_on_malloc)
 
+#define GET_STACK_TRACE_THREAD GET_STACK_TRACE(kStackTraceMax, true)
+
 namespace __lsan {
 
 void InitializeInterceptors();
+void ReplaceSystemMalloc();
+
+#define ENSURE_LSAN_INITED do {   \
+  CHECK(!lsan_init_is_running);   \
+  if (!lsan_inited)               \
+    __lsan_init();                \
+} while (0)
 
 }  // namespace __lsan
 
diff --git a/lib/lsan/lsan_allocator.cc b/lib/lsan/lsan_allocator.cc
index c805a39..2df58b4 100644
--- a/lib/lsan/lsan_allocator.cc
+++ b/lib/lsan/lsan_allocator.cc
@@ -15,7 +15,9 @@
 #include "lsan_allocator.h"
 
 #include "sanitizer_common/sanitizer_allocator.h"
+#include "sanitizer_common/sanitizer_allocator_checks.h"
 #include "sanitizer_common/sanitizer_allocator_interface.h"
+#include "sanitizer_common/sanitizer_errno.h"
 #include "sanitizer_common/sanitizer_internal_defs.h"
 #include "sanitizer_common/sanitizer_stackdepot.h"
 #include "sanitizer_common/sanitizer_stacktrace.h"
@@ -24,53 +26,27 @@
 extern "C" void *memset(void *ptr, int value, uptr num);
 
 namespace __lsan {
-
-struct ChunkMetadata {
-  u8 allocated : 8;  // Must be first.
-  ChunkTag tag : 2;
-  uptr requested_size : 54;
-  u32 stack_trace_id;
-};
-
-#if defined(__mips64) || defined(__aarch64__)
+#if defined(__i386__) || defined(__arm__)
+static const uptr kMaxAllowedMallocSize = 1UL << 30;
+#elif defined(__mips64) || defined(__aarch64__)
 static const uptr kMaxAllowedMallocSize = 4UL << 30;
-static const uptr kRegionSizeLog = 20;
-static const uptr kNumRegions = SANITIZER_MMAP_RANGE_SIZE >> kRegionSizeLog;
-typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap;
-typedef CompactSizeClassMap SizeClassMap;
-typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE,
-    sizeof(ChunkMetadata), SizeClassMap, kRegionSizeLog, ByteMap>
-    PrimaryAllocator;
 #else
 static const uptr kMaxAllowedMallocSize = 8UL << 30;
-
-struct AP64 {  // Allocator64 parameters. Deliberately using a short name.
-  static const uptr kSpaceBeg = 0x600000000000ULL;
-  static const uptr kSpaceSize =  0x40000000000ULL; // 4T.
-  static const uptr kMetadataSize = sizeof(ChunkMetadata);
-  typedef DefaultSizeClassMap SizeClassMap;
-  typedef NoOpMapUnmapCallback MapUnmapCallback;
-  static const uptr kFlags = 0;
-};
-
-typedef SizeClassAllocator64<AP64> PrimaryAllocator;
 #endif
-typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
 typedef LargeMmapAllocator<> SecondaryAllocator;
 typedef CombinedAllocator<PrimaryAllocator, AllocatorCache,
           SecondaryAllocator> Allocator;
 
 static Allocator allocator;
-static THREADLOCAL AllocatorCache cache;
 
 void InitializeAllocator() {
+  SetAllocatorMayReturnNull(common_flags()->allocator_may_return_null);
   allocator.InitLinkerInitialized(
-      common_flags()->allocator_may_return_null,
       common_flags()->allocator_release_to_os_interval_ms);
 }
 
 void AllocatorThreadFinish() {
-  allocator.SwallowCache(&cache);
+  allocator.SwallowCache(GetAllocatorCache());
 }
 
 static ChunkMetadata *Metadata(const void *p) {
@@ -100,9 +76,9 @@
     size = 1;
   if (size > kMaxAllowedMallocSize) {
     Report("WARNING: LeakSanitizer failed to allocate %zu bytes\n", size);
-    return nullptr;
+    return Allocator::FailureHandler::OnBadRequest();
   }
-  void *p = allocator.Allocate(&cache, size, alignment, false);
+  void *p = allocator.Allocate(GetAllocatorCache(), size, alignment);
   // Do not rely on the allocator to clear the memory (it's slow).
   if (cleared && allocator.FromPrimary(p))
     memset(p, 0, size);
@@ -112,11 +88,18 @@
   return p;
 }
 
+static void *Calloc(uptr nmemb, uptr size, const StackTrace &stack) {
+  if (UNLIKELY(CheckForCallocOverflow(size, nmemb)))
+    return Allocator::FailureHandler::OnBadRequest();
+  size *= nmemb;
+  return Allocate(stack, size, 1, true);
+}
+
 void Deallocate(void *p) {
   if (&__sanitizer_free_hook) __sanitizer_free_hook(p);
   RunFreeHooks(p);
   RegisterDeallocation(p);
-  allocator.Deallocate(&cache, p);
+  allocator.Deallocate(GetAllocatorCache(), p);
 }
 
 void *Reallocate(const StackTrace &stack, void *p, uptr new_size,
@@ -124,17 +107,17 @@
   RegisterDeallocation(p);
   if (new_size > kMaxAllowedMallocSize) {
     Report("WARNING: LeakSanitizer failed to allocate %zu bytes\n", new_size);
-    allocator.Deallocate(&cache, p);
-    return nullptr;
+    allocator.Deallocate(GetAllocatorCache(), p);
+    return Allocator::FailureHandler::OnBadRequest();
   }
-  p = allocator.Reallocate(&cache, p, new_size, alignment);
+  p = allocator.Reallocate(GetAllocatorCache(), p, new_size, alignment);
   RegisterAllocation(stack, p, new_size);
   return p;
 }
 
 void GetAllocatorCacheRange(uptr *begin, uptr *end) {
-  *begin = (uptr)&cache;
-  *end = *begin + sizeof(cache);
+  *begin = (uptr)GetAllocatorCache();
+  *end = *begin + sizeof(AllocatorCache);
 }
 
 uptr GetMallocUsableSize(const void *p) {
@@ -143,6 +126,39 @@
   return m->requested_size;
 }
 
+void *lsan_memalign(uptr alignment, uptr size, const StackTrace &stack) {
+  if (UNLIKELY(!IsPowerOfTwo(alignment))) {
+    errno = errno_EINVAL;
+    return Allocator::FailureHandler::OnBadRequest();
+  }
+  return SetErrnoOnNull(Allocate(stack, size, alignment, kAlwaysClearMemory));
+}
+
+void *lsan_malloc(uptr size, const StackTrace &stack) {
+  return SetErrnoOnNull(Allocate(stack, size, 1, kAlwaysClearMemory));
+}
+
+void lsan_free(void *p) {
+  Deallocate(p);
+}
+
+void *lsan_realloc(void *p, uptr size, const StackTrace &stack) {
+  return SetErrnoOnNull(Reallocate(stack, p, size, 1));
+}
+
+void *lsan_calloc(uptr nmemb, uptr size, const StackTrace &stack) {
+  return SetErrnoOnNull(Calloc(nmemb, size, stack));
+}
+
+void *lsan_valloc(uptr size, const StackTrace &stack) {
+  return SetErrnoOnNull(
+      Allocate(stack, size, GetPageSizeCached(), kAlwaysClearMemory));
+}
+
+uptr lsan_mz_size(const void *p) {
+  return GetMallocUsableSize(p);
+}
+
 ///// Interface to the common LSan module. /////
 
 void LockAllocator() {
diff --git a/lib/lsan/lsan_allocator.h b/lib/lsan/lsan_allocator.h
index f564601..5a0d94c 100644
--- a/lib/lsan/lsan_allocator.h
+++ b/lib/lsan/lsan_allocator.h
@@ -15,8 +15,10 @@
 #ifndef LSAN_ALLOCATOR_H
 #define LSAN_ALLOCATOR_H
 
+#include "sanitizer_common/sanitizer_allocator.h"
 #include "sanitizer_common/sanitizer_common.h"
 #include "sanitizer_common/sanitizer_internal_defs.h"
+#include "lsan_common.h"
 
 namespace __lsan {
 
@@ -34,6 +36,61 @@
 void AllocatorThreadFinish();
 void InitializeAllocator();
 
+const bool kAlwaysClearMemory = true;
+
+struct ChunkMetadata {
+  u8 allocated : 8;  // Must be first.
+  ChunkTag tag : 2;
+#if SANITIZER_WORDSIZE == 64
+  uptr requested_size : 54;
+#else
+  uptr requested_size : 32;
+  uptr padding : 22;
+#endif
+  u32 stack_trace_id;
+};
+
+#if defined(__mips64) || defined(__aarch64__) || defined(__i386__) || \
+    defined(__arm__)
+static const uptr kRegionSizeLog = 20;
+static const uptr kNumRegions = SANITIZER_MMAP_RANGE_SIZE >> kRegionSizeLog;
+typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap;
+
+struct AP32 {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+  static const uptr kMetadataSize = sizeof(ChunkMetadata);
+  typedef __sanitizer::CompactSizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = __lsan::kRegionSizeLog;
+  typedef __lsan::ByteMap ByteMap;
+  typedef NoOpMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+typedef SizeClassAllocator32<AP32> PrimaryAllocator;
+#elif defined(__x86_64__) || defined(__powerpc64__)
+struct AP64 {  // Allocator64 parameters. Deliberately using a short name.
+  static const uptr kSpaceBeg = 0x600000000000ULL;
+  static const uptr kSpaceSize =  0x40000000000ULL; // 4T.
+  static const uptr kMetadataSize = sizeof(ChunkMetadata);
+  typedef DefaultSizeClassMap SizeClassMap;
+  typedef NoOpMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+
+typedef SizeClassAllocator64<AP64> PrimaryAllocator;
+#endif
+typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
+
+AllocatorCache *GetAllocatorCache();
+
+void *lsan_memalign(uptr alignment, uptr size, const StackTrace &stack);
+void *lsan_malloc(uptr size, const StackTrace &stack);
+void lsan_free(void *p);
+void *lsan_realloc(void *p, uptr size, const StackTrace &stack);
+void *lsan_calloc(uptr nmemb, uptr size, const StackTrace &stack);
+void *lsan_valloc(uptr size, const StackTrace &stack);
+uptr lsan_mz_size(const void *p);
+
 }  // namespace __lsan
 
 #endif  // LSAN_ALLOCATOR_H
diff --git a/lib/lsan/lsan_common.cc b/lib/lsan/lsan_common.cc
index f055452..c121e6a 100644
--- a/lib/lsan/lsan_common.cc
+++ b/lib/lsan/lsan_common.cc
@@ -32,20 +32,15 @@
 // also to protect the global list of root regions.
 BlockingMutex global_mutex(LINKER_INITIALIZED);
 
-__attribute__((tls_model("initial-exec")))
-THREADLOCAL int disable_counter;
-bool DisabledInThisThread() { return disable_counter > 0; }
-void DisableInThisThread() { disable_counter++; }
-void EnableInThisThread() {
-  if (!disable_counter && common_flags()->detect_leaks) {
+Flags lsan_flags;
+
+void DisableCounterUnderflow() {
+  if (common_flags()->detect_leaks) {
     Report("Unmatched call to __lsan_enable().\n");
     Die();
   }
-  disable_counter--;
 }
 
-Flags lsan_flags;
-
 void Flags::SetDefaults() {
 #define LSAN_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;
 #include "lsan_flags.inc"
@@ -73,6 +68,19 @@
 static SuppressionContext *suppression_ctx = nullptr;
 static const char kSuppressionLeak[] = "leak";
 static const char *kSuppressionTypes[] = { kSuppressionLeak };
+static const char kStdSuppressions[] =
+#if SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
+  // For more details refer to the SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
+  // definition.
+  "leak:*pthread_exit*\n"
+#endif  // SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
+#if SANITIZER_MAC
+  // For Darwin and os_log/os_trace: https://reviews.llvm.org/D35173
+  "leak:*_os_trace*\n"
+#endif
+  // TLS leak in some glibc versions, described in
+  // https://sourceware.org/bugzilla/show_bug.cgi?id=12650.
+  "leak:*tls_get_addr*\n";
 
 void InitializeSuppressions() {
   CHECK_EQ(nullptr, suppression_ctx);
@@ -81,6 +89,7 @@
   suppression_ctx->ParseFromFile(flags()->suppressions);
   if (&__lsan_default_suppressions)
     suppression_ctx->Parse(__lsan_default_suppressions());
+  suppression_ctx->Parse(kStdSuppressions);
 }
 
 static SuppressionContext *GetSuppressionContext() {
@@ -88,12 +97,9 @@
   return suppression_ctx;
 }
 
-struct RootRegion {
-  const void *begin;
-  uptr size;
-};
+static InternalMmapVector<RootRegion> *root_regions;
 
-InternalMmapVector<RootRegion> *root_regions;
+InternalMmapVector<RootRegion> const *GetRootRegions() { return root_regions; }
 
 void InitializeRootRegions() {
   CHECK(!root_regions);
@@ -180,6 +186,23 @@
   }
 }
 
+// Scans a global range for pointers
+void ScanGlobalRange(uptr begin, uptr end, Frontier *frontier) {
+  uptr allocator_begin = 0, allocator_end = 0;
+  GetAllocatorGlobalRange(&allocator_begin, &allocator_end);
+  if (begin <= allocator_begin && allocator_begin < end) {
+    CHECK_LE(allocator_begin, allocator_end);
+    CHECK_LE(allocator_end, end);
+    if (begin < allocator_begin)
+      ScanRangeForPointers(begin, allocator_begin, frontier, "GLOBAL",
+                           kReachable);
+    if (allocator_end < end)
+      ScanRangeForPointers(allocator_end, end, frontier, "GLOBAL", kReachable);
+  } else {
+    ScanRangeForPointers(begin, end, frontier, "GLOBAL", kReachable);
+  }
+}
+
 void ForEachExtraStackRangeCb(uptr begin, uptr end, void* arg) {
   Frontier *frontier = reinterpret_cast<Frontier *>(arg);
   ScanRangeForPointers(begin, end, frontier, "FAKE STACK", kReachable);
@@ -188,11 +211,11 @@
 // Scans thread data (stacks and TLS) for heap pointers.
 static void ProcessThreads(SuspendedThreadsList const &suspended_threads,
                            Frontier *frontier) {
-  InternalScopedBuffer<uptr> registers(SuspendedThreadsList::RegisterCount());
+  InternalScopedBuffer<uptr> registers(suspended_threads.RegisterCount());
   uptr registers_begin = reinterpret_cast<uptr>(registers.data());
   uptr registers_end = registers_begin + registers.size();
-  for (uptr i = 0; i < suspended_threads.thread_count(); i++) {
-    uptr os_id = static_cast<uptr>(suspended_threads.GetThreadID(i));
+  for (uptr i = 0; i < suspended_threads.ThreadCount(); i++) {
+    tid_t os_id = static_cast<tid_t>(suspended_threads.GetThreadID(i));
     LOG_THREADS("Processing thread %d.\n", os_id);
     uptr stack_begin, stack_end, tls_begin, tls_end, cache_begin, cache_end;
     DTLS *dtls;
@@ -206,11 +229,13 @@
       continue;
     }
     uptr sp;
-    bool have_registers =
-        (suspended_threads.GetRegistersAndSP(i, registers.data(), &sp) == 0);
-    if (!have_registers) {
-      Report("Unable to get registers from thread %d.\n");
-      // If unable to get SP, consider the entire stack to be reachable.
+    PtraceRegistersStatus have_registers =
+        suspended_threads.GetRegistersAndSP(i, registers.data(), &sp);
+    if (have_registers != REGISTERS_AVAILABLE) {
+      Report("Unable to get registers from thread %d.\n", os_id);
+      // If unable to get SP, consider the entire stack to be reachable unless
+      // GetRegistersAndSP failed with ESRCH.
+      if (have_registers == REGISTERS_UNAVAILABLE_FATAL) continue;
       sp = stack_begin;
     }
 
@@ -244,21 +269,23 @@
     }
 
     if (flags()->use_tls) {
-      LOG_THREADS("TLS at %p-%p.\n", tls_begin, tls_end);
-      if (cache_begin == cache_end) {
-        ScanRangeForPointers(tls_begin, tls_end, frontier, "TLS", kReachable);
-      } else {
-        // Because LSan should not be loaded with dlopen(), we can assume
-        // that allocator cache will be part of static TLS image.
-        CHECK_LE(tls_begin, cache_begin);
-        CHECK_GE(tls_end, cache_end);
-        if (tls_begin < cache_begin)
-          ScanRangeForPointers(tls_begin, cache_begin, frontier, "TLS",
-                               kReachable);
-        if (tls_end > cache_end)
-          ScanRangeForPointers(cache_end, tls_end, frontier, "TLS", kReachable);
+      if (tls_begin) {
+        LOG_THREADS("TLS at %p-%p.\n", tls_begin, tls_end);
+        // If the tls and cache ranges don't overlap, scan full tls range,
+        // otherwise, only scan the non-overlapping portions
+        if (cache_begin == cache_end || tls_end < cache_begin ||
+            tls_begin > cache_end) {
+          ScanRangeForPointers(tls_begin, tls_end, frontier, "TLS", kReachable);
+        } else {
+          if (tls_begin < cache_begin)
+            ScanRangeForPointers(tls_begin, cache_begin, frontier, "TLS",
+                                 kReachable);
+          if (tls_end > cache_end)
+            ScanRangeForPointers(cache_end, tls_end, frontier, "TLS",
+                                 kReachable);
+        }
       }
-      if (dtls) {
+      if (dtls && !DTLSInDestruction(dtls)) {
         for (uptr j = 0; j < dtls->dtv_size; ++j) {
           uptr dtls_beg = dtls->dtv[j].beg;
           uptr dtls_end = dtls_beg + dtls->dtv[j].size;
@@ -268,28 +295,36 @@
                                  kReachable);
           }
         }
+      } else {
+        // We are handling a thread with DTLS under destruction. Log about
+        // this and continue.
+        LOG_THREADS("Thread %d has DTLS under destruction.\n", os_id);
       }
     }
   }
 }
 
-static void ProcessRootRegion(Frontier *frontier, uptr root_begin,
-                              uptr root_end) {
-  MemoryMappingLayout proc_maps(/*cache_enabled*/true);
-  uptr begin, end, prot;
-  while (proc_maps.Next(&begin, &end,
-                        /*offset*/ nullptr, /*filename*/ nullptr,
-                        /*filename_size*/ 0, &prot)) {
-    uptr intersection_begin = Max(root_begin, begin);
-    uptr intersection_end = Min(end, root_end);
-    if (intersection_begin >= intersection_end) continue;
-    bool is_readable = prot & MemoryMappingLayout::kProtectionRead;
-    LOG_POINTERS("Root region %p-%p intersects with mapped region %p-%p (%s)\n",
-                 root_begin, root_end, begin, end,
-                 is_readable ? "readable" : "unreadable");
-    if (is_readable)
-      ScanRangeForPointers(intersection_begin, intersection_end, frontier,
-                           "ROOT", kReachable);
+void ScanRootRegion(Frontier *frontier, const RootRegion &root_region,
+                    uptr region_begin, uptr region_end, bool is_readable) {
+  uptr intersection_begin = Max(root_region.begin, region_begin);
+  uptr intersection_end = Min(region_end, root_region.begin + root_region.size);
+  if (intersection_begin >= intersection_end) return;
+  LOG_POINTERS("Root region %p-%p intersects with mapped region %p-%p (%s)\n",
+               root_region.begin, root_region.begin + root_region.size,
+               region_begin, region_end,
+               is_readable ? "readable" : "unreadable");
+  if (is_readable)
+    ScanRangeForPointers(intersection_begin, intersection_end, frontier, "ROOT",
+                         kReachable);
+}
+
+static void ProcessRootRegion(Frontier *frontier,
+                              const RootRegion &root_region) {
+  MemoryMappingLayout proc_maps(/*cache_enabled*/ true);
+  MemoryMappedSegment segment;
+  while (proc_maps.Next(&segment)) {
+    ScanRootRegion(frontier, root_region, segment.start, segment.end,
+                   segment.IsReadable());
   }
 }
 
@@ -298,9 +333,7 @@
   if (!flags()->use_root_regions) return;
   CHECK(root_regions);
   for (uptr i = 0; i < root_regions->size(); i++) {
-    RootRegion region = (*root_regions)[i];
-    uptr begin_addr = reinterpret_cast<uptr>(region.begin);
-    ProcessRootRegion(frontier, begin_addr, begin_addr + region.size);
+    ProcessRootRegion(frontier, (*root_regions)[i]);
   }
 }
 
@@ -338,6 +371,72 @@
   }
 }
 
+static uptr GetCallerPC(u32 stack_id, StackDepotReverseMap *map) {
+  CHECK(stack_id);
+  StackTrace stack = map->Get(stack_id);
+  // The top frame is our malloc/calloc/etc. The next frame is the caller.
+  if (stack.size >= 2)
+    return stack.trace[1];
+  return 0;
+}
+
+struct InvalidPCParam {
+  Frontier *frontier;
+  StackDepotReverseMap *stack_depot_reverse_map;
+  bool skip_linker_allocations;
+};
+
+// ForEachChunk callback. If the caller pc is invalid or is within the linker,
+// mark as reachable. Called by ProcessPlatformSpecificAllocations.
+static void MarkInvalidPCCb(uptr chunk, void *arg) {
+  CHECK(arg);
+  InvalidPCParam *param = reinterpret_cast<InvalidPCParam *>(arg);
+  chunk = GetUserBegin(chunk);
+  LsanMetadata m(chunk);
+  if (m.allocated() && m.tag() != kReachable && m.tag() != kIgnored) {
+    u32 stack_id = m.stack_trace_id();
+    uptr caller_pc = 0;
+    if (stack_id > 0)
+      caller_pc = GetCallerPC(stack_id, param->stack_depot_reverse_map);
+    // If caller_pc is unknown, this chunk may be allocated in a coroutine. Mark
+    // it as reachable, as we can't properly report its allocation stack anyway.
+    if (caller_pc == 0 || (param->skip_linker_allocations &&
+                           GetLinker()->containsAddress(caller_pc))) {
+      m.set_tag(kReachable);
+      param->frontier->push_back(chunk);
+    }
+  }
+}
+
+// On Linux, handles dynamically allocated TLS blocks by treating all chunks
+// allocated from ld-linux.so as reachable.
+// Dynamic TLS blocks contain the TLS variables of dynamically loaded modules.
+// They are allocated with a __libc_memalign() call in allocate_and_init()
+// (elf/dl-tls.c). Glibc won't tell us the address ranges occupied by those
+// blocks, but we can make sure they come from our own allocator by intercepting
+// __libc_memalign(). On top of that, there is no easy way to reach them. Their
+// addresses are stored in a dynamically allocated array (the DTV) which is
+// referenced from the static TLS. Unfortunately, we can't just rely on the DTV
+// being reachable from the static TLS, and the dynamic TLS being reachable from
+// the DTV. This is because the initial DTV is allocated before our interception
+// mechanism kicks in, and thus we don't recognize it as allocated memory. We
+// can't special-case it either, since we don't know its size.
+// Our solution is to include in the root set all allocations made from
+// ld-linux.so (which is where allocate_and_init() is implemented). This is
+// guaranteed to include all dynamic TLS blocks (and possibly other allocations
+// which we don't care about).
+// On all other platforms, this simply checks to ensure that the caller pc is
+// valid before reporting chunks as leaked.
+void ProcessPC(Frontier *frontier) {
+  StackDepotReverseMap stack_depot_reverse_map;
+  InvalidPCParam arg;
+  arg.frontier = frontier;
+  arg.stack_depot_reverse_map = &stack_depot_reverse_map;
+  arg.skip_linker_allocations =
+      flags()->use_tls && flags()->use_ld_allocations && GetLinker() != nullptr;
+  ForEachChunk(MarkInvalidPCCb, &arg);
+}
+
 // Sets the appropriate tag on each chunk.
 static void ClassifyAllChunks(SuspendedThreadsList const &suspended_threads) {
   // Holds the flood fill frontier.
@@ -349,11 +448,13 @@
   ProcessRootRegions(&frontier);
   FloodFillTag(&frontier, kReachable);
 
+  CHECK_EQ(0, frontier.size());
+  ProcessPC(&frontier);
+
   // The check here is relatively expensive, so we do this in a separate flood
   // fill. That way we can skip the check for chunks that are reachable
   // otherwise.
   LOG_POINTERS("Processing platform-specific allocations.\n");
-  CHECK_EQ(0, frontier.size());
   ProcessPlatformSpecificAllocations(&frontier);
   FloodFillTag(&frontier, kReachable);
 
@@ -475,18 +576,16 @@
   return false;
 }
 
+static bool has_reported_leaks = false;
+bool HasReportedLeaks() { return has_reported_leaks; }
+
 void DoLeakCheck() {
   BlockingMutexLock l(&global_mutex);
   static bool already_done;
   if (already_done) return;
   already_done = true;
-  bool have_leaks = CheckForLeaks();
-  if (!have_leaks) {
-    return;
-  }
-  if (common_flags()->exitcode) {
-    Die();
-  }
+  has_reported_leaks = CheckForLeaks();
+  if (has_reported_leaks) HandleLeaks();
 }
 
 static int DoRecoverableLeakCheck() {
@@ -689,7 +788,7 @@
 #if CAN_SANITIZE_LEAKS
   BlockingMutexLock l(&global_mutex);
   CHECK(root_regions);
-  RootRegion region = {begin, size};
+  RootRegion region = {reinterpret_cast<uptr>(begin), size};
   root_regions->push_back(region);
   VReport(1, "Registered root region at %p of size %llu\n", begin, size);
 #endif // CAN_SANITIZE_LEAKS
@@ -703,7 +802,7 @@
   bool removed = false;
   for (uptr i = 0; i < root_regions->size(); i++) {
     RootRegion region = (*root_regions)[i];
-    if (region.begin == begin && region.size == size) {
+    if (region.begin == reinterpret_cast<uptr>(begin) && region.size == size) {
       removed = true;
       uptr last_index = root_regions->size() - 1;
       (*root_regions)[i] = (*root_regions)[last_index];
diff --git a/lib/lsan/lsan_common.h b/lib/lsan/lsan_common.h
index 890ce65..31bf3eb 100644
--- a/lib/lsan/lsan_common.h
+++ b/lib/lsan/lsan_common.h
@@ -22,8 +22,24 @@
 #include "sanitizer_common/sanitizer_stoptheworld.h"
 #include "sanitizer_common/sanitizer_symbolizer.h"
 
-#if (SANITIZER_LINUX && !SANITIZER_ANDROID) && (SANITIZER_WORDSIZE == 64) \
-     && (defined(__x86_64__) ||  defined(__mips64) ||  defined(__aarch64__))
+// LeakSanitizer relies on some Glibc's internals (e.g. TLS machinery) thus
+// supported for Linux only. Also, LSan doesn't like 32 bit architectures
+// because of "small" (4 bytes) pointer size that leads to high false negative
+// ratio on large leaks. But we still want to have it for some 32 bit arches
+// (e.g. x86), see https://github.com/google/sanitizers/issues/403.
+// To enable LeakSanitizer on new architecture, one need to implement
+// internal_clone function as well as (probably) adjust TLS machinery for
+// new architecture inside sanitizer library.
+#if (SANITIZER_LINUX && !SANITIZER_ANDROID || SANITIZER_MAC) && \
+    (SANITIZER_WORDSIZE == 64) &&                               \
+    (defined(__x86_64__) || defined(__mips64) || defined(__aarch64__) || \
+     defined(__powerpc64__))
+#define CAN_SANITIZE_LEAKS 1
+#elif defined(__i386__) && \
+    (SANITIZER_LINUX && !SANITIZER_ANDROID || SANITIZER_MAC)
+#define CAN_SANITIZE_LEAKS 1
+#elif defined(__arm__) && \
+    SANITIZER_LINUX && !SANITIZER_ANDROID
 #define CAN_SANITIZE_LEAKS 1
 #else
 #define CAN_SANITIZE_LEAKS 0
@@ -44,6 +60,8 @@
   kIgnored = 3
 };
 
+const u32 kInvalidTid = (u32) -1;
+
 struct Flags {
 #define LSAN_FLAG(Type, Name, DefaultValue, Description) Type Name;
 #include "lsan_flags.inc"
@@ -101,12 +119,22 @@
 void InitializePlatformSpecificModules();
 void ProcessGlobalRegions(Frontier *frontier);
 void ProcessPlatformSpecificAllocations(Frontier *frontier);
+
+struct RootRegion {
+  uptr begin;
+  uptr size;
+};
+
+InternalMmapVector<RootRegion> const *GetRootRegions();
+void ScanRootRegion(Frontier *frontier, RootRegion const &region,
+                    uptr region_begin, uptr region_end, bool is_readable);
 // Run stoptheworld while holding any platform-specific locks.
 void DoStopTheWorld(StopTheWorldCallback callback, void* argument);
 
 void ScanRangeForPointers(uptr begin, uptr end,
                           Frontier *frontier,
                           const char *region_type, ChunkTag tag);
+void ScanGlobalRange(uptr begin, uptr end, Frontier *frontier);
 
 enum IgnoreObjectResult {
   kIgnoreObjectSuccess,
@@ -117,6 +145,7 @@
 // Functions called from the parent tool.
 void InitCommonLsan();
 void DoLeakCheck();
+void DisableCounterUnderflow();
 bool DisabledInThisThread();
 
 // Used to implement __lsan::ScopedDisabler.
@@ -129,15 +158,38 @@
   ~ScopedInterceptorDisabler() { EnableInThisThread(); }
 };
 
-// Special case for "new T[0]" where T is a type with DTOR.
-// new T[0] will allocate one word for the array size (0) and store a pointer
-// to the end of allocated chunk.
-inline bool IsSpecialCaseOfOperatorNew0(uptr chunk_beg, uptr chunk_size,
-                                        uptr addr) {
+// According to Itanium C++ ABI array cookie is a one word containing
+// size of allocated array.
+static inline bool IsItaniumABIArrayCookie(uptr chunk_beg, uptr chunk_size,
+                                           uptr addr) {
   return chunk_size == sizeof(uptr) && chunk_beg + chunk_size == addr &&
          *reinterpret_cast<uptr *>(chunk_beg) == 0;
 }
 
+// According to ARM C++ ABI array cookie consists of two words:
+// struct array_cookie {
+//   std::size_t element_size; // element_size != 0
+//   std::size_t element_count;
+// };
+static inline bool IsARMABIArrayCookie(uptr chunk_beg, uptr chunk_size,
+                                       uptr addr) {
+  return chunk_size == 2 * sizeof(uptr) && chunk_beg + chunk_size == addr &&
+         *reinterpret_cast<uptr *>(chunk_beg + sizeof(uptr)) == 0;
+}
+
+// Special case for "new T[0]" where T is a type with DTOR.
+// new T[0] will allocate a cookie (one or two words) for the array size (0)
+// and store a pointer to the end of allocated chunk. The actual cookie layout
+// varies between platforms according to their C++ ABI implementation.
+inline bool IsSpecialCaseOfOperatorNew0(uptr chunk_beg, uptr chunk_size,
+                                        uptr addr) {
+#if defined(__arm__)
+  return IsARMABIArrayCookie(chunk_beg, chunk_size, addr);
+#else
+  return IsItaniumABIArrayCookie(chunk_beg, chunk_size, addr);
+#endif
+}
+
 // The following must be implemented in the parent tool.
 
 void ForEachChunk(ForEachChunkCallback callback, void *arg);
@@ -151,10 +203,10 @@
 // Wrappers for ThreadRegistry access.
 void LockThreadRegistry();
 void UnlockThreadRegistry();
-bool GetThreadRangesLocked(uptr os_id, uptr *stack_begin, uptr *stack_end,
+bool GetThreadRangesLocked(tid_t os_id, uptr *stack_begin, uptr *stack_end,
                            uptr *tls_begin, uptr *tls_end, uptr *cache_begin,
                            uptr *cache_end, DTLS **dtls);
-void ForEachExtraStackRange(uptr os_id, RangeIteratorCallback callback,
+void ForEachExtraStackRange(tid_t os_id, RangeIteratorCallback callback,
                             void *arg);
 // If called from the main thread, updates the main thread's TID in the thread
 // registry. We need this to handle processes that fork() without a subsequent
@@ -170,6 +222,16 @@
 uptr GetUserBegin(uptr chunk);
 // Helper for __lsan_ignore_object().
 IgnoreObjectResult IgnoreObjectLocked(const void *p);
+
+// Return the linker module, if valid for the platform.
+LoadedModule *GetLinker();
+
+// Return true if LSan has finished leak checking and reported leaks.
+bool HasReportedLeaks();
+
+// Run platform-specific leak handlers.
+void HandleLeaks();
+
 // Wrapper for chunk metadata operations.
 class LsanMetadata {
  public:
diff --git a/lib/lsan/lsan_common_linux.cc b/lib/lsan/lsan_common_linux.cc
index f6154d8..5042c7b 100644
--- a/lib/lsan/lsan_common_linux.cc
+++ b/lib/lsan/lsan_common_linux.cc
@@ -34,6 +34,17 @@
   return LibraryNameIs(full_name, kLinkerName);
 }
 
+__attribute__((tls_model("initial-exec")))
+THREADLOCAL int disable_counter;
+bool DisabledInThisThread() { return disable_counter > 0; }
+void DisableInThisThread() { disable_counter++; }
+void EnableInThisThread() {
+  if (disable_counter == 0) {
+    DisableCounterUnderflow();
+  }
+  disable_counter--;
+}
+
 void InitializePlatformSpecificModules() {
   ListOfModules modules;
   modules.init();
@@ -51,8 +62,10 @@
       return;
     }
   }
-  VReport(1, "LeakSanitizer: Dynamic linker not found. "
-             "TLS will not be handled correctly.\n");
+  if (linker == nullptr) {
+    VReport(1, "LeakSanitizer: Dynamic linker not found. "
+               "TLS will not be handled correctly.\n");
+  }
 }
 
 static int ProcessGlobalRegionsCallback(struct dl_phdr_info *info, size_t size,
@@ -67,20 +80,7 @@
       continue;
     uptr begin = info->dlpi_addr + phdr->p_vaddr;
     uptr end = begin + phdr->p_memsz;
-    uptr allocator_begin = 0, allocator_end = 0;
-    GetAllocatorGlobalRange(&allocator_begin, &allocator_end);
-    if (begin <= allocator_begin && allocator_begin < end) {
-      CHECK_LE(allocator_begin, allocator_end);
-      CHECK_LE(allocator_end, end);
-      if (begin < allocator_begin)
-        ScanRangeForPointers(begin, allocator_begin, frontier, "GLOBAL",
-                             kReachable);
-      if (allocator_end < end)
-        ScanRangeForPointers(allocator_end, end, frontier, "GLOBAL",
-                             kReachable);
-    } else {
-      ScanRangeForPointers(begin, end, frontier, "GLOBAL", kReachable);
-    }
+    ScanGlobalRange(begin, end, frontier);
   }
   return 0;
 }
@@ -91,76 +91,22 @@
   dl_iterate_phdr(ProcessGlobalRegionsCallback, frontier);
 }
 
-static uptr GetCallerPC(u32 stack_id, StackDepotReverseMap *map) {
-  CHECK(stack_id);
-  StackTrace stack = map->Get(stack_id);
-  // The top frame is our malloc/calloc/etc. The next frame is the caller.
-  if (stack.size >= 2)
-    return stack.trace[1];
-  return 0;
-}
+LoadedModule *GetLinker() { return linker; }
 
-struct ProcessPlatformAllocParam {
-  Frontier *frontier;
-  StackDepotReverseMap *stack_depot_reverse_map;
-  bool skip_linker_allocations;
-};
-
-// ForEachChunk callback. Identifies unreachable chunks which must be treated as
-// reachable. Marks them as reachable and adds them to the frontier.
-static void ProcessPlatformSpecificAllocationsCb(uptr chunk, void *arg) {
-  CHECK(arg);
-  ProcessPlatformAllocParam *param =
-      reinterpret_cast<ProcessPlatformAllocParam *>(arg);
-  chunk = GetUserBegin(chunk);
-  LsanMetadata m(chunk);
-  if (m.allocated() && m.tag() != kReachable && m.tag() != kIgnored) {
-    u32 stack_id = m.stack_trace_id();
-    uptr caller_pc = 0;
-    if (stack_id > 0)
-      caller_pc = GetCallerPC(stack_id, param->stack_depot_reverse_map);
-    // If caller_pc is unknown, this chunk may be allocated in a coroutine. Mark
-    // it as reachable, as we can't properly report its allocation stack anyway.
-    if (caller_pc == 0 || (param->skip_linker_allocations &&
-                           linker->containsAddress(caller_pc))) {
-      m.set_tag(kReachable);
-      param->frontier->push_back(chunk);
-    }
-  }
-}
-
-// Handles dynamically allocated TLS blocks by treating all chunks allocated
-// from ld-linux.so as reachable.
-// Dynamic TLS blocks contain the TLS variables of dynamically loaded modules.
-// They are allocated with a __libc_memalign() call in allocate_and_init()
-// (elf/dl-tls.c). Glibc won't tell us the address ranges occupied by those
-// blocks, but we can make sure they come from our own allocator by intercepting
-// __libc_memalign(). On top of that, there is no easy way to reach them. Their
-// addresses are stored in a dynamically allocated array (the DTV) which is
-// referenced from the static TLS. Unfortunately, we can't just rely on the DTV
-// being reachable from the static TLS, and the dynamic TLS being reachable from
-// the DTV. This is because the initial DTV is allocated before our interception
-// mechanism kicks in, and thus we don't recognize it as allocated memory. We
-// can't special-case it either, since we don't know its size.
-// Our solution is to include in the root set all allocations made from
-// ld-linux.so (which is where allocate_and_init() is implemented). This is
-// guaranteed to include all dynamic TLS blocks (and possibly other allocations
-// which we don't care about).
-void ProcessPlatformSpecificAllocations(Frontier *frontier) {
-  StackDepotReverseMap stack_depot_reverse_map;
-  ProcessPlatformAllocParam arg;
-  arg.frontier = frontier;
-  arg.stack_depot_reverse_map = &stack_depot_reverse_map;
-  arg.skip_linker_allocations =
-      flags()->use_tls && flags()->use_ld_allocations && linker != nullptr;
-  ForEachChunk(ProcessPlatformSpecificAllocationsCb, &arg);
-}
+void ProcessPlatformSpecificAllocations(Frontier *frontier) {}
 
 struct DoStopTheWorldParam {
   StopTheWorldCallback callback;
   void *argument;
 };
 
+// While calling Die() here is undefined behavior and can potentially
+// cause race conditions, it isn't possible to intercept exit on linux,
+// so we have no choice but to call Die() from the atexit handler.
+void HandleLeaks() {
+  if (common_flags()->exitcode) Die();
+}
+
 static int DoStopTheWorldCallback(struct dl_phdr_info *info, size_t size,
                                   void *data) {
   DoStopTheWorldParam *param = reinterpret_cast<DoStopTheWorldParam *>(data);
diff --git a/lib/lsan/lsan_common_mac.cc b/lib/lsan/lsan_common_mac.cc
new file mode 100644
index 0000000..ade9434
--- /dev/null
+++ b/lib/lsan/lsan_common_mac.cc
@@ -0,0 +1,178 @@
+//=-- lsan_common_mac.cc --------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of LeakSanitizer.
+// Implementation of common leak checking functionality. Darwin-specific code.
+//
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+#include "lsan_common.h"
+
+#if CAN_SANITIZE_LEAKS && SANITIZER_MAC
+
+#include "sanitizer_common/sanitizer_allocator_internal.h"
+#include "lsan_allocator.h"
+
+#include <pthread.h>
+
+#include <mach/mach.h>
+
+namespace __lsan {
+
+typedef struct {
+  int disable_counter;
+  u32 current_thread_id;
+  AllocatorCache cache;
+} thread_local_data_t;
+
+static pthread_key_t key;
+static pthread_once_t key_once = PTHREAD_ONCE_INIT;
+
+// The main thread destructor requires the current thread id,
+// so we can't destroy it until it's been used and reset to invalid tid
+void restore_tid_data(void *ptr) {
+  thread_local_data_t *data = (thread_local_data_t *)ptr;
+  if (data->current_thread_id != kInvalidTid)
+    pthread_setspecific(key, data);
+}
+
+static void make_tls_key() {
+  CHECK_EQ(pthread_key_create(&key, restore_tid_data), 0);
+}
+
+static thread_local_data_t *get_tls_val(bool alloc) {
+  pthread_once(&key_once, make_tls_key);
+
+  thread_local_data_t *ptr = (thread_local_data_t *)pthread_getspecific(key);
+  if (ptr == NULL && alloc) {
+    ptr = (thread_local_data_t *)InternalAlloc(sizeof(*ptr));
+    ptr->disable_counter = 0;
+    ptr->current_thread_id = kInvalidTid;
+    ptr->cache = AllocatorCache();
+    pthread_setspecific(key, ptr);
+  }
+
+  return ptr;
+}
+
+bool DisabledInThisThread() {
+  thread_local_data_t *data = get_tls_val(false);
+  return data ? data->disable_counter > 0 : false;
+}
+
+void DisableInThisThread() { ++get_tls_val(true)->disable_counter; }
+
+void EnableInThisThread() {
+  int *disable_counter = &get_tls_val(true)->disable_counter;
+  if (*disable_counter == 0) {
+    DisableCounterUnderflow();
+  }
+  --*disable_counter;
+}
+
+u32 GetCurrentThread() {
+  thread_local_data_t *data = get_tls_val(false);
+  return data ? data->current_thread_id : kInvalidTid;
+}
+
+void SetCurrentThread(u32 tid) { get_tls_val(true)->current_thread_id = tid; }
+
+AllocatorCache *GetAllocatorCache() { return &get_tls_val(true)->cache; }
+
+LoadedModule *GetLinker() { return nullptr; }
+
+// Required on Linux for initialization of TLS behavior, but should not be
+// required on Darwin.
+void InitializePlatformSpecificModules() {}
+
+// Scans global variables for heap pointers.
+void ProcessGlobalRegions(Frontier *frontier) {
+  MemoryMappingLayout memory_mapping(false);
+  InternalMmapVector<LoadedModule> modules(/*initial_capacity*/ 128);
+  memory_mapping.DumpListOfModules(&modules);
+  for (uptr i = 0; i < modules.size(); ++i) {
+    // Even when global scanning is disabled, we still need to scan
+    // system libraries for stashed pointers
+    if (!flags()->use_globals && modules[i].instrumented()) continue;
+
+    for (const __sanitizer::LoadedModule::AddressRange &range :
+         modules[i].ranges()) {
+      // Sections storing global variables are writable and non-executable
+      if (range.executable || !range.writable) continue;
+
+      ScanGlobalRange(range.beg, range.end, frontier);
+    }
+  }
+}
+
+void ProcessPlatformSpecificAllocations(Frontier *frontier) {
+  mach_port_name_t port;
+  if (task_for_pid(mach_task_self(), internal_getpid(), &port)
+      != KERN_SUCCESS) {
+    return;
+  }
+
+  unsigned depth = 1;
+  vm_size_t size = 0;
+  vm_address_t address = 0;
+  kern_return_t err = KERN_SUCCESS;
+  mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64;
+
+  InternalMmapVector<RootRegion> const *root_regions = GetRootRegions();
+
+  while (err == KERN_SUCCESS) {
+    struct vm_region_submap_info_64 info;
+    err = vm_region_recurse_64(port, &address, &size, &depth,
+                               (vm_region_info_t)&info, &count);
+
+    uptr end_address = address + size;
+
+    // libxpc stashes some pointers in the Kernel Alloc Once page,
+    // make sure not to report those as leaks.
+    if (info.user_tag == VM_MEMORY_OS_ALLOC_ONCE) {
+      ScanRangeForPointers(address, end_address, frontier, "GLOBAL",
+                           kReachable);
+
+      // Recursing over the full memory map is very slow, break out
+      // early if we don't need the full iteration.
+      if (!flags()->use_root_regions || !root_regions->size())
+        break;
+    }
+
+    // This additional root region scan is required on Darwin in order to
+    // detect root regions contained within mmap'd memory regions, because
+    // the Darwin implementation of sanitizer_procmaps traverses images
+    // as loaded by dyld, and not the complete set of all memory regions.
+    //
+    // TODO(fjricci) - remove this once sanitizer_procmaps_mac has the same
+    // behavior as sanitizer_procmaps_linux and traverses all memory regions
+    if (flags()->use_root_regions) {
+      for (uptr i = 0; i < root_regions->size(); i++) {
+        ScanRootRegion(frontier, (*root_regions)[i], address, end_address,
+                       info.protection & kProtectionRead);
+      }
+    }
+
+    address = end_address;
+  }
+}
+
+// On darwin, we can intercept _exit gracefully, and return a failing exit code
+// if required at that point. Calling Die() here is undefined behavior and
+// causes rare race conditions.
+void HandleLeaks() {}
+
+void DoStopTheWorld(StopTheWorldCallback callback, void *argument) {
+  StopTheWorld(callback, argument);
+}
+
+} // namespace __lsan
+
+#endif // CAN_SANITIZE_LEAKS && SANITIZER_MAC
diff --git a/lib/lsan/lsan_interceptors.cc b/lib/lsan/lsan_interceptors.cc
index 1219017..168868b 100644
--- a/lib/lsan/lsan_interceptors.cc
+++ b/lib/lsan/lsan_interceptors.cc
@@ -21,12 +21,15 @@
 #include "sanitizer_common/sanitizer_linux.h"
 #include "sanitizer_common/sanitizer_platform_interceptors.h"
 #include "sanitizer_common/sanitizer_platform_limits_posix.h"
+#include "sanitizer_common/sanitizer_posix.h"
 #include "sanitizer_common/sanitizer_tls_get_addr.h"
 #include "lsan.h"
 #include "lsan_allocator.h"
 #include "lsan_common.h"
 #include "lsan_thread.h"
 
+#include <stddef.h>
+
 using namespace __lsan;
 
 extern "C" {
@@ -37,29 +40,22 @@
 int pthread_setspecific(unsigned key, const void *v);
 }
 
-#define ENSURE_LSAN_INITED do {   \
-  CHECK(!lsan_init_is_running);   \
-  if (!lsan_inited)               \
-    __lsan_init();                \
-} while (0)
-
 ///// Malloc/free interceptors. /////
 
-const bool kAlwaysClearMemory = true;
-
 namespace std {
   struct nothrow_t;
 }
 
+#if !SANITIZER_MAC
 INTERCEPTOR(void*, malloc, uptr size) {
   ENSURE_LSAN_INITED;
   GET_STACK_TRACE_MALLOC;
-  return Allocate(stack, size, 1, kAlwaysClearMemory);
+  return lsan_malloc(size, stack);
 }
 
 INTERCEPTOR(void, free, void *p) {
   ENSURE_LSAN_INITED;
-  Deallocate(p);
+  lsan_free(p);
 }
 
 INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) {
@@ -74,31 +70,44 @@
     CHECK(allocated < kCallocPoolSize);
     return mem;
   }
-  if (CallocShouldReturnNullDueToOverflow(size, nmemb)) return nullptr;
   ENSURE_LSAN_INITED;
   GET_STACK_TRACE_MALLOC;
-  size *= nmemb;
-  return Allocate(stack, size, 1, true);
+  return lsan_calloc(nmemb, size, stack);
 }
 
 INTERCEPTOR(void*, realloc, void *q, uptr size) {
   ENSURE_LSAN_INITED;
   GET_STACK_TRACE_MALLOC;
-  return Reallocate(stack, q, size, 1);
+  return lsan_realloc(q, size, stack);
 }
 
+INTERCEPTOR(int, posix_memalign, void **memptr, uptr alignment, uptr size) {
+  ENSURE_LSAN_INITED;
+  GET_STACK_TRACE_MALLOC;
+  *memptr = lsan_memalign(alignment, size, stack);
+  // FIXME: Return ENOMEM if user requested more than max alloc size.
+  return 0;
+}
+
+INTERCEPTOR(void*, valloc, uptr size) {
+  ENSURE_LSAN_INITED;
+  GET_STACK_TRACE_MALLOC;
+  return lsan_valloc(size, stack);
+}
+#endif
+
 #if SANITIZER_INTERCEPT_MEMALIGN
 INTERCEPTOR(void*, memalign, uptr alignment, uptr size) {
   ENSURE_LSAN_INITED;
   GET_STACK_TRACE_MALLOC;
-  return Allocate(stack, size, alignment, kAlwaysClearMemory);
+  return lsan_memalign(alignment, size, stack);
 }
 #define LSAN_MAYBE_INTERCEPT_MEMALIGN INTERCEPT_FUNCTION(memalign)
 
 INTERCEPTOR(void *, __libc_memalign, uptr alignment, uptr size) {
   ENSURE_LSAN_INITED;
   GET_STACK_TRACE_MALLOC;
-  void *res = Allocate(stack, size, alignment, kAlwaysClearMemory);
+  void *res = lsan_memalign(alignment, size, stack);
   DTLS_on_libc_memalign(res, size);
   return res;
 }
@@ -108,32 +117,27 @@
 #define LSAN_MAYBE_INTERCEPT___LIBC_MEMALIGN
 #endif // SANITIZER_INTERCEPT_MEMALIGN
 
+#if SANITIZER_INTERCEPT_ALIGNED_ALLOC
 INTERCEPTOR(void*, aligned_alloc, uptr alignment, uptr size) {
   ENSURE_LSAN_INITED;
   GET_STACK_TRACE_MALLOC;
-  return Allocate(stack, size, alignment, kAlwaysClearMemory);
+  return lsan_memalign(alignment, size, stack);
 }
+#define LSAN_MAYBE_INTERCEPT_ALIGNED_ALLOC INTERCEPT_FUNCTION(aligned_alloc)
+#else
+#define LSAN_MAYBE_INTERCEPT_ALIGNED_ALLOC
+#endif
 
-INTERCEPTOR(int, posix_memalign, void **memptr, uptr alignment, uptr size) {
-  ENSURE_LSAN_INITED;
-  GET_STACK_TRACE_MALLOC;
-  *memptr = Allocate(stack, size, alignment, kAlwaysClearMemory);
-  // FIXME: Return ENOMEM if user requested more than max alloc size.
-  return 0;
-}
-
-INTERCEPTOR(void*, valloc, uptr size) {
-  ENSURE_LSAN_INITED;
-  GET_STACK_TRACE_MALLOC;
-  if (size == 0)
-    size = GetPageSizeCached();
-  return Allocate(stack, size, GetPageSizeCached(), kAlwaysClearMemory);
-}
-
+#if SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE
 INTERCEPTOR(uptr, malloc_usable_size, void *ptr) {
   ENSURE_LSAN_INITED;
   return GetMallocUsableSize(ptr);
 }
+#define LSAN_MAYBE_INTERCEPT_MALLOC_USABLE_SIZE \
+        INTERCEPT_FUNCTION(malloc_usable_size)
+#else
+#define LSAN_MAYBE_INTERCEPT_MALLOC_USABLE_SIZE
+#endif
 
 #if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO
 struct fake_mallinfo {
@@ -180,24 +184,52 @@
 #define LSAN_MAYBE_INTERCEPT_CFREE
 #endif // SANITIZER_INTERCEPT_CFREE
 
-#define OPERATOR_NEW_BODY                              \
-  ENSURE_LSAN_INITED;                                  \
-  GET_STACK_TRACE_MALLOC;                              \
-  return Allocate(stack, size, 1, kAlwaysClearMemory);
+#if SANITIZER_INTERCEPT_MCHECK_MPROBE
+INTERCEPTOR(int, mcheck, void (*abortfunc)(int mstatus)) {
+  return 0;
+}
 
-INTERCEPTOR_ATTRIBUTE
-void *operator new(uptr size) { OPERATOR_NEW_BODY; }
-INTERCEPTOR_ATTRIBUTE
-void *operator new[](uptr size) { OPERATOR_NEW_BODY; }
-INTERCEPTOR_ATTRIBUTE
-void *operator new(uptr size, std::nothrow_t const&) { OPERATOR_NEW_BODY; }
-INTERCEPTOR_ATTRIBUTE
-void *operator new[](uptr size, std::nothrow_t const&) { OPERATOR_NEW_BODY; }
+INTERCEPTOR(int, mcheck_pedantic, void (*abortfunc)(int mstatus)) {
+  return 0;
+}
+
+INTERCEPTOR(int, mprobe, void *ptr) {
+  return 0;
+}
+#endif // SANITIZER_INTERCEPT_MCHECK_MPROBE
+
+
+// TODO(alekseys): throw std::bad_alloc instead of dying on OOM.
+#define OPERATOR_NEW_BODY(nothrow)                         \
+  ENSURE_LSAN_INITED;                                      \
+  GET_STACK_TRACE_MALLOC;                                  \
+  void *res = Allocate(stack, size, 1, kAlwaysClearMemory);\
+  if (!nothrow && UNLIKELY(!res)) DieOnFailure::OnOOM();\
+  return res;
 
 #define OPERATOR_DELETE_BODY \
   ENSURE_LSAN_INITED;        \
   Deallocate(ptr);
 
+// On OS X it's not enough to just provide our own 'operator new' and
+// 'operator delete' implementations, because they're going to be in the runtime
+// dylib, and the main executable will depend on both the runtime dylib and
+// libstdc++, each of has its implementation of new and delete.
+// To make sure that C++ allocation/deallocation operators are overridden on
+// OS X we need to intercept them using their mangled names.
+#if !SANITIZER_MAC
+
+INTERCEPTOR_ATTRIBUTE
+void *operator new(size_t size) { OPERATOR_NEW_BODY(false /*nothrow*/); }
+INTERCEPTOR_ATTRIBUTE
+void *operator new[](size_t size) { OPERATOR_NEW_BODY(false /*nothrow*/); }
+INTERCEPTOR_ATTRIBUTE
+void *operator new(size_t size, std::nothrow_t const&)
+{ OPERATOR_NEW_BODY(true /*nothrow*/); }
+INTERCEPTOR_ATTRIBUTE
+void *operator new[](size_t size, std::nothrow_t const&)
+{ OPERATOR_NEW_BODY(true /*nothrow*/); }
+
 INTERCEPTOR_ATTRIBUTE
 void operator delete(void *ptr) NOEXCEPT { OPERATOR_DELETE_BODY; }
 INTERCEPTOR_ATTRIBUTE
@@ -205,9 +237,31 @@
 INTERCEPTOR_ATTRIBUTE
 void operator delete(void *ptr, std::nothrow_t const&) { OPERATOR_DELETE_BODY; }
 INTERCEPTOR_ATTRIBUTE
-void operator delete[](void *ptr, std::nothrow_t const &) {
-  OPERATOR_DELETE_BODY;
-}
+void operator delete[](void *ptr, std::nothrow_t const &)
+{ OPERATOR_DELETE_BODY; }
+
+#else  // SANITIZER_MAC
+
+INTERCEPTOR(void *, _Znwm, size_t size)
+{ OPERATOR_NEW_BODY(false /*nothrow*/); }
+INTERCEPTOR(void *, _Znam, size_t size)
+{ OPERATOR_NEW_BODY(false /*nothrow*/); }
+INTERCEPTOR(void *, _ZnwmRKSt9nothrow_t, size_t size, std::nothrow_t const&)
+{ OPERATOR_NEW_BODY(true /*nothrow*/); }
+INTERCEPTOR(void *, _ZnamRKSt9nothrow_t, size_t size, std::nothrow_t const&)
+{ OPERATOR_NEW_BODY(true /*nothrow*/); }
+
+INTERCEPTOR(void, _ZdlPv, void *ptr)
+{ OPERATOR_DELETE_BODY; }
+INTERCEPTOR(void, _ZdaPv, void *ptr)
+{ OPERATOR_DELETE_BODY; }
+INTERCEPTOR(void, _ZdlPvRKSt9nothrow_t, void *ptr, std::nothrow_t const&)
+{ OPERATOR_DELETE_BODY; }
+INTERCEPTOR(void, _ZdaPvRKSt9nothrow_t, void *ptr, std::nothrow_t const&)
+{ OPERATOR_DELETE_BODY; }
+
+#endif  // !SANITIZER_MAC
+
 
 ///// Thread initialization and finalization. /////
 
@@ -277,7 +331,8 @@
     res = REAL(pthread_create)(th, attr, __lsan_thread_start_func, &p);
   }
   if (res == 0) {
-    int tid = ThreadCreate(GetCurrentThread(), *(uptr *)th, detached);
+    int tid = ThreadCreate(GetCurrentThread(), *(uptr *)th,
+                           IsStateDetached(detached));
     CHECK_NE(tid, 0);
     atomic_store(&p.tid, tid, memory_order_release);
     while (atomic_load(&p.tid, memory_order_acquire) != 0)
@@ -297,6 +352,11 @@
   return res;
 }
 
+INTERCEPTOR(void, _exit, int status) {
+  if (status == 0 && HasReportedLeaks()) status = common_flags()->exitcode;
+  REAL(_exit)(status);
+}
+
 namespace __lsan {
 
 void InitializeInterceptors() {
@@ -307,15 +367,16 @@
   INTERCEPT_FUNCTION(realloc);
   LSAN_MAYBE_INTERCEPT_MEMALIGN;
   LSAN_MAYBE_INTERCEPT___LIBC_MEMALIGN;
-  INTERCEPT_FUNCTION(aligned_alloc);
+  LSAN_MAYBE_INTERCEPT_ALIGNED_ALLOC;
   INTERCEPT_FUNCTION(posix_memalign);
   INTERCEPT_FUNCTION(valloc);
   LSAN_MAYBE_INTERCEPT_PVALLOC;
-  INTERCEPT_FUNCTION(malloc_usable_size);
+  LSAN_MAYBE_INTERCEPT_MALLOC_USABLE_SIZE;
   LSAN_MAYBE_INTERCEPT_MALLINFO;
   LSAN_MAYBE_INTERCEPT_MALLOPT;
   INTERCEPT_FUNCTION(pthread_create);
   INTERCEPT_FUNCTION(pthread_join);
+  INTERCEPT_FUNCTION(_exit);
 
   if (pthread_key_create(&g_thread_finalize_key, &thread_finalize)) {
     Report("LeakSanitizer: failed to create thread key.\n");
diff --git a/lib/lsan/lsan_linux.cc b/lib/lsan/lsan_linux.cc
new file mode 100644
index 0000000..c9749c7
--- /dev/null
+++ b/lib/lsan/lsan_linux.cc
@@ -0,0 +1,33 @@
+//=-- lsan_linux.cc -------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of LeakSanitizer. Linux-specific code.
+//
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+
+#if SANITIZER_LINUX
+
+#include "lsan_allocator.h"
+
+namespace __lsan {
+
+static THREADLOCAL u32 current_thread_tid = kInvalidTid;
+u32 GetCurrentThread() { return current_thread_tid; }
+void SetCurrentThread(u32 tid) { current_thread_tid = tid; }
+
+static THREADLOCAL AllocatorCache allocator_cache;
+AllocatorCache *GetAllocatorCache() { return &allocator_cache; }
+
+void ReplaceSystemMalloc() {}
+
+} // namespace __lsan
+
+#endif // SANITIZER_LINUX
diff --git a/lib/lsan/lsan_mac.cc b/lib/lsan/lsan_mac.cc
new file mode 100644
index 0000000..1a6f5f4
--- /dev/null
+++ b/lib/lsan/lsan_mac.cc
@@ -0,0 +1,192 @@
+//===-- lsan_mac.cc -------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of LeakSanitizer, a memory leak checker.
+//
+// Mac-specific details.
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+#if SANITIZER_MAC
+
+#include "interception/interception.h"
+#include "lsan.h"
+#include "lsan_allocator.h"
+#include "lsan_thread.h"
+
+#include <pthread.h>
+
+namespace __lsan {
+// Support for the following functions from libdispatch on Mac OS:
+//   dispatch_async_f()
+//   dispatch_async()
+//   dispatch_sync_f()
+//   dispatch_sync()
+//   dispatch_after_f()
+//   dispatch_after()
+//   dispatch_group_async_f()
+//   dispatch_group_async()
+// TODO(glider): libdispatch API contains other functions that we don't support
+// yet.
+//
+// dispatch_sync() and dispatch_sync_f() are synchronous, although chances are
+// they can cause jobs to run on a thread different from the current one.
+// TODO(glider): if so, we need a test for this (otherwise we should remove
+// them).
+//
+// The following functions use dispatch_barrier_async_f() (which isn't a library
+// function but is exported) and are thus supported:
+//   dispatch_source_set_cancel_handler_f()
+//   dispatch_source_set_cancel_handler()
+//   dispatch_source_set_event_handler_f()
+//   dispatch_source_set_event_handler()
+//
+// The reference manual for Grand Central Dispatch is available at
+//   http://developer.apple.com/library/mac/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html
+// The implementation details are at
+//   http://libdispatch.macosforge.org/trac/browser/trunk/src/queue.c
+
+typedef void *dispatch_group_t;
+typedef void *dispatch_queue_t;
+typedef void *dispatch_source_t;
+typedef u64 dispatch_time_t;
+typedef void (*dispatch_function_t)(void *block);
+typedef void *(*worker_t)(void *block);
+
+// A wrapper for the ObjC blocks used to support libdispatch.
+typedef struct {
+  void *block;
+  dispatch_function_t func;
+  u32 parent_tid;
+} lsan_block_context_t;
+
+ALWAYS_INLINE
+void lsan_register_worker_thread(int parent_tid) {
+  if (GetCurrentThread() == kInvalidTid) {
+    u32 tid = ThreadCreate(parent_tid, 0, true);
+    ThreadStart(tid, GetTid());
+    SetCurrentThread(tid);
+  }
+}
+
+// For use by only those functions that allocated the context via
+// alloc_lsan_context().
+extern "C" void lsan_dispatch_call_block_and_release(void *block) {
+  lsan_block_context_t *context = (lsan_block_context_t *)block;
+  VReport(2,
+          "lsan_dispatch_call_block_and_release(): "
+          "context: %p, pthread_self: %p\n",
+          block, pthread_self());
+  lsan_register_worker_thread(context->parent_tid);
+  // Call the original dispatcher for the block.
+  context->func(context->block);
+  lsan_free(context);
+}
+
+}  // namespace __lsan
+
+using namespace __lsan;  // NOLINT
+
+// Wrap |ctxt| and |func| into an lsan_block_context_t.
+// The caller retains control of the allocated context.
+extern "C" lsan_block_context_t *alloc_lsan_context(void *ctxt,
+                                                    dispatch_function_t func) {
+  GET_STACK_TRACE_THREAD;
+  lsan_block_context_t *lsan_ctxt =
+      (lsan_block_context_t *)lsan_malloc(sizeof(lsan_block_context_t), stack);
+  lsan_ctxt->block = ctxt;
+  lsan_ctxt->func = func;
+  lsan_ctxt->parent_tid = GetCurrentThread();
+  return lsan_ctxt;
+}
+
+// Define interceptor for dispatch_*_f function with the three most common
+// parameters: dispatch_queue_t, context, dispatch_function_t.
+#define INTERCEPT_DISPATCH_X_F_3(dispatch_x_f)                        \
+  INTERCEPTOR(void, dispatch_x_f, dispatch_queue_t dq, void *ctxt,    \
+              dispatch_function_t func) {                             \
+    lsan_block_context_t *lsan_ctxt = alloc_lsan_context(ctxt, func); \
+    return REAL(dispatch_x_f)(dq, (void *)lsan_ctxt,                  \
+                              lsan_dispatch_call_block_and_release);  \
+  }
+
+INTERCEPT_DISPATCH_X_F_3(dispatch_async_f)
+INTERCEPT_DISPATCH_X_F_3(dispatch_sync_f)
+INTERCEPT_DISPATCH_X_F_3(dispatch_barrier_async_f)
+
+INTERCEPTOR(void, dispatch_after_f, dispatch_time_t when, dispatch_queue_t dq,
+            void *ctxt, dispatch_function_t func) {
+  lsan_block_context_t *lsan_ctxt = alloc_lsan_context(ctxt, func);
+  return REAL(dispatch_after_f)(when, dq, (void *)lsan_ctxt,
+                                lsan_dispatch_call_block_and_release);
+}
+
+INTERCEPTOR(void, dispatch_group_async_f, dispatch_group_t group,
+            dispatch_queue_t dq, void *ctxt, dispatch_function_t func) {
+  lsan_block_context_t *lsan_ctxt = alloc_lsan_context(ctxt, func);
+  REAL(dispatch_group_async_f)
+  (group, dq, (void *)lsan_ctxt, lsan_dispatch_call_block_and_release);
+}
+
+#if !defined(MISSING_BLOCKS_SUPPORT)
+extern "C" {
+void dispatch_async(dispatch_queue_t dq, void (^work)(void));
+void dispatch_group_async(dispatch_group_t dg, dispatch_queue_t dq,
+                          void (^work)(void));
+void dispatch_after(dispatch_time_t when, dispatch_queue_t queue,
+                    void (^work)(void));
+void dispatch_source_set_cancel_handler(dispatch_source_t ds,
+                                        void (^work)(void));
+void dispatch_source_set_event_handler(dispatch_source_t ds,
+                                       void (^work)(void));
+}
+
+#define GET_LSAN_BLOCK(work)                 \
+  void (^lsan_block)(void);                  \
+  int parent_tid = GetCurrentThread();       \
+  lsan_block = ^(void) {                     \
+    lsan_register_worker_thread(parent_tid); \
+    work();                                  \
+  }
+
+INTERCEPTOR(void, dispatch_async, dispatch_queue_t dq, void (^work)(void)) {
+  GET_LSAN_BLOCK(work);
+  REAL(dispatch_async)(dq, lsan_block);
+}
+
+INTERCEPTOR(void, dispatch_group_async, dispatch_group_t dg,
+            dispatch_queue_t dq, void (^work)(void)) {
+  GET_LSAN_BLOCK(work);
+  REAL(dispatch_group_async)(dg, dq, lsan_block);
+}
+
+INTERCEPTOR(void, dispatch_after, dispatch_time_t when, dispatch_queue_t queue,
+            void (^work)(void)) {
+  GET_LSAN_BLOCK(work);
+  REAL(dispatch_after)(when, queue, lsan_block);
+}
+
+INTERCEPTOR(void, dispatch_source_set_cancel_handler, dispatch_source_t ds,
+            void (^work)(void)) {
+  if (!work) {
+    REAL(dispatch_source_set_cancel_handler)(ds, work);
+    return;
+  }
+  GET_LSAN_BLOCK(work);
+  REAL(dispatch_source_set_cancel_handler)(ds, lsan_block);
+}
+
+INTERCEPTOR(void, dispatch_source_set_event_handler, dispatch_source_t ds,
+            void (^work)(void)) {
+  GET_LSAN_BLOCK(work);
+  REAL(dispatch_source_set_event_handler)(ds, lsan_block);
+}
+#endif
+
+#endif  // SANITIZER_MAC
diff --git a/lib/lsan/lsan_malloc_mac.cc b/lib/lsan/lsan_malloc_mac.cc
new file mode 100644
index 0000000..9c1dacc
--- /dev/null
+++ b/lib/lsan/lsan_malloc_mac.cc
@@ -0,0 +1,55 @@
+//===-- lsan_malloc_mac.cc ------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of LeakSanitizer (LSan), a memory leak detector.
+//
+// Mac-specific malloc interception.
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+#if SANITIZER_MAC
+
+#include "lsan.h"
+#include "lsan_allocator.h"
+#include "lsan_thread.h"
+
+using namespace __lsan;
+#define COMMON_MALLOC_ZONE_NAME "lsan"
+#define COMMON_MALLOC_ENTER() ENSURE_LSAN_INITED
+#define COMMON_MALLOC_SANITIZER_INITIALIZED lsan_inited
+#define COMMON_MALLOC_FORCE_LOCK()
+#define COMMON_MALLOC_FORCE_UNLOCK()
+#define COMMON_MALLOC_MEMALIGN(alignment, size) \
+  GET_STACK_TRACE_MALLOC; \
+  void *p = lsan_memalign(alignment, size, stack)
+#define COMMON_MALLOC_MALLOC(size) \
+  GET_STACK_TRACE_MALLOC; \
+  void *p = lsan_malloc(size, stack)
+#define COMMON_MALLOC_REALLOC(ptr, size) \
+  GET_STACK_TRACE_MALLOC; \
+  void *p = lsan_realloc(ptr, size, stack)
+#define COMMON_MALLOC_CALLOC(count, size) \
+  GET_STACK_TRACE_MALLOC; \
+  void *p = lsan_calloc(count, size, stack)
+#define COMMON_MALLOC_VALLOC(size) \
+  GET_STACK_TRACE_MALLOC; \
+  void *p = lsan_valloc(size, stack)
+#define COMMON_MALLOC_FREE(ptr) \
+  lsan_free(ptr)
+#define COMMON_MALLOC_SIZE(ptr) \
+  uptr size = lsan_mz_size(ptr)
+#define COMMON_MALLOC_FILL_STATS(zone, stats)
+#define COMMON_MALLOC_REPORT_UNKNOWN_REALLOC(ptr, zone_ptr, zone_name) \
+  (void)zone_name; \
+  Report("mz_realloc(%p) -- attempting to realloc unallocated memory.\n", ptr);
+#define COMMON_MALLOC_NAMESPACE __lsan
+
+#include "sanitizer_common/sanitizer_malloc_mac.inc"
+
+#endif // SANITIZER_MAC
diff --git a/lib/lsan/lsan_thread.cc b/lib/lsan/lsan_thread.cc
index f82a04a..4404c8c 100644
--- a/lib/lsan/lsan_thread.cc
+++ b/lib/lsan/lsan_thread.cc
@@ -19,13 +19,11 @@
 #include "sanitizer_common/sanitizer_thread_registry.h"
 #include "sanitizer_common/sanitizer_tls_get_addr.h"
 #include "lsan_allocator.h"
+#include "lsan_common.h"
 
 namespace __lsan {
 
-const u32 kInvalidTid = (u32) -1;
-
 static ThreadRegistry *thread_registry;
-static THREADLOCAL u32 current_thread_tid = kInvalidTid;
 
 static ThreadContextBase *CreateThreadContext(u32 tid) {
   void *mem = MmapOrDie(sizeof(ThreadContext), "ThreadContext");
@@ -41,14 +39,6 @@
     ThreadRegistry(CreateThreadContext, kMaxThreads, kThreadQuarantineSize);
 }
 
-u32 GetCurrentThread() {
-  return current_thread_tid;
-}
-
-void SetCurrentThread(u32 tid) {
-  current_thread_tid = tid;
-}
-
 ThreadContext::ThreadContext(int tid)
     : ThreadContextBase(tid),
       stack_begin_(0),
@@ -87,7 +77,7 @@
                                        /* arg */ nullptr);
 }
 
-void ThreadStart(u32 tid, uptr os_id) {
+void ThreadStart(u32 tid, tid_t os_id, bool workerthread) {
   OnStartedArgs args;
   uptr stack_size = 0;
   uptr tls_size = 0;
@@ -97,11 +87,12 @@
   args.tls_end = args.tls_begin + tls_size;
   GetAllocatorCacheRange(&args.cache_begin, &args.cache_end);
   args.dtls = DTLS_Get();
-  thread_registry->StartThread(tid, os_id, /*workerthread*/ false, &args);
+  thread_registry->StartThread(tid, os_id, workerthread, &args);
 }
 
 void ThreadFinish() {
   thread_registry->FinishThread(GetCurrentThread());
+  SetCurrentThread(kInvalidTid);
 }
 
 ThreadContext *CurrentThreadContext() {
@@ -136,7 +127,7 @@
 
 ///// Interface to the common LSan module. /////
 
-bool GetThreadRangesLocked(uptr os_id, uptr *stack_begin, uptr *stack_end,
+bool GetThreadRangesLocked(tid_t os_id, uptr *stack_begin, uptr *stack_end,
                            uptr *tls_begin, uptr *tls_end, uptr *cache_begin,
                            uptr *cache_end, DTLS **dtls) {
   ThreadContext *context = static_cast<ThreadContext *>(
@@ -152,7 +143,7 @@
   return true;
 }
 
-void ForEachExtraStackRange(uptr os_id, RangeIteratorCallback callback,
+void ForEachExtraStackRange(tid_t os_id, RangeIteratorCallback callback,
                             void *arg) {
 }
 
diff --git a/lib/lsan/lsan_thread.h b/lib/lsan/lsan_thread.h
index 10b7b57..b16d3d9 100644
--- a/lib/lsan/lsan_thread.h
+++ b/lib/lsan/lsan_thread.h
@@ -45,7 +45,7 @@
 
 void InitializeThreadRegistry();
 
-void ThreadStart(u32 tid, uptr os_id);
+void ThreadStart(u32 tid, tid_t os_id, bool workerthread = false);
 void ThreadFinish();
 u32 ThreadCreate(u32 tid, uptr uid, bool detached);
 void ThreadJoin(u32 tid);
diff --git a/lib/lsan/weak_symbols.txt b/lib/lsan/weak_symbols.txt
new file mode 100644
index 0000000..da4f994
--- /dev/null
+++ b/lib/lsan/weak_symbols.txt
@@ -0,0 +1,2 @@
+___lsan_default_suppressions
+___lsan_is_turned_off
diff --git a/lib/msan/msan.h b/lib/msan/msan.h
index 0709260..fa9c15b 100644
--- a/lib/msan/msan.h
+++ b/lib/msan/msan.h
@@ -280,10 +280,18 @@
 
 void MsanAllocatorInit();
 void MsanAllocatorThreadFinish();
-void *MsanCalloc(StackTrace *stack, uptr nmemb, uptr size);
-void *MsanReallocate(StackTrace *stack, void *oldp, uptr size,
-                     uptr alignment, bool zeroise);
 void MsanDeallocate(StackTrace *stack, void *ptr);
+
+void *msan_malloc(uptr size, StackTrace *stack);
+void *msan_calloc(uptr nmemb, uptr size, StackTrace *stack);
+void *msan_realloc(void *ptr, uptr size, StackTrace *stack);
+void *msan_valloc(uptr size, StackTrace *stack);
+void *msan_pvalloc(uptr size, StackTrace *stack);
+void *msan_aligned_alloc(uptr alignment, uptr size, StackTrace *stack);
+void *msan_memalign(uptr alignment, uptr size, StackTrace *stack);
+int msan_posix_memalign(void **memptr, uptr alignment, uptr size,
+                        StackTrace *stack);
+
 void InstallTrapHandler();
 void InstallAtExitHandler();
 
diff --git a/lib/msan/msan_allocator.cc b/lib/msan/msan_allocator.cc
index 6c389f0..1034dbd 100644
--- a/lib/msan/msan_allocator.cc
+++ b/lib/msan/msan_allocator.cc
@@ -13,7 +13,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "sanitizer_common/sanitizer_allocator.h"
+#include "sanitizer_common/sanitizer_allocator_checks.h"
 #include "sanitizer_common/sanitizer_allocator_interface.h"
+#include "sanitizer_common/sanitizer_errno.h"
 #include "msan.h"
 #include "msan_allocator.h"
 #include "msan_origin.h"
@@ -47,12 +49,18 @@
   static const uptr kRegionSizeLog = 20;
   static const uptr kNumRegions = SANITIZER_MMAP_RANGE_SIZE >> kRegionSizeLog;
   typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap;
-  typedef CompactSizeClassMap SizeClassMap;
 
-  typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE, sizeof(Metadata),
-                               SizeClassMap, kRegionSizeLog, ByteMap,
-                               MsanMapUnmapCallback> PrimaryAllocator;
-
+  struct AP32 {
+    static const uptr kSpaceBeg = 0;
+    static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+    static const uptr kMetadataSize = sizeof(Metadata);
+    typedef __sanitizer::CompactSizeClassMap SizeClassMap;
+    static const uptr kRegionSizeLog = __msan::kRegionSizeLog;
+    typedef __msan::ByteMap ByteMap;
+    typedef MsanMapUnmapCallback MapUnmapCallback;
+    static const uptr kFlags = 0;
+  };
+  typedef SizeClassAllocator32<AP32> PrimaryAllocator;
 #elif defined(__x86_64__)
 #if SANITIZER_LINUX && !defined(MSAN_LINUX_X86_64_OLD_MAPPING)
   static const uptr kAllocatorSpace = 0x700000000000ULL;
@@ -90,11 +98,18 @@
   static const uptr kRegionSizeLog = 20;
   static const uptr kNumRegions = SANITIZER_MMAP_RANGE_SIZE >> kRegionSizeLog;
   typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap;
-  typedef CompactSizeClassMap SizeClassMap;
 
-  typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE, sizeof(Metadata),
-                               SizeClassMap, kRegionSizeLog, ByteMap,
-                               MsanMapUnmapCallback> PrimaryAllocator;
+  struct AP32 {
+    static const uptr kSpaceBeg = 0;
+    static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+    static const uptr kMetadataSize = sizeof(Metadata);
+    typedef __sanitizer::CompactSizeClassMap SizeClassMap;
+    static const uptr kRegionSizeLog = __msan::kRegionSizeLog;
+    typedef __msan::ByteMap ByteMap;
+    typedef MsanMapUnmapCallback MapUnmapCallback;
+    static const uptr kFlags = 0;
+  };
+  typedef SizeClassAllocator32<AP32> PrimaryAllocator;
 #endif
 typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
 typedef LargeMmapAllocator<MsanMapUnmapCallback> SecondaryAllocator;
@@ -106,9 +121,8 @@
 static SpinMutex fallback_mutex;
 
 void MsanAllocatorInit() {
-  allocator.Init(
-      common_flags()->allocator_may_return_null,
-      common_flags()->allocator_release_to_os_interval_ms);
+  SetAllocatorMayReturnNull(common_flags()->allocator_may_return_null);
+  allocator.Init(common_flags()->allocator_release_to_os_interval_ms);
 }
 
 AllocatorCache *GetAllocatorCache(MsanThreadLocalMallocStorage *ms) {
@@ -126,17 +140,17 @@
   if (size > kMaxAllowedMallocSize) {
     Report("WARNING: MemorySanitizer failed to allocate %p bytes\n",
            (void *)size);
-    return allocator.ReturnNullOrDieOnBadRequest();
+    return Allocator::FailureHandler::OnBadRequest();
   }
   MsanThread *t = GetCurrentThread();
   void *allocated;
   if (t) {
     AllocatorCache *cache = GetAllocatorCache(&t->malloc_storage());
-    allocated = allocator.Allocate(cache, size, alignment, false);
+    allocated = allocator.Allocate(cache, size, alignment);
   } else {
     SpinMutexLock l(&fallback_mutex);
     AllocatorCache *cache = &fallback_allocator_cache;
-    allocated = allocator.Allocate(cache, size, alignment, false);
+    allocated = allocator.Allocate(cache, size, alignment);
   }
   Metadata *meta =
       reinterpret_cast<Metadata *>(allocator.GetMetaData(allocated));
@@ -182,20 +196,8 @@
   }
 }
 
-void *MsanCalloc(StackTrace *stack, uptr nmemb, uptr size) {
-  if (CallocShouldReturnNullDueToOverflow(size, nmemb))
-    return allocator.ReturnNullOrDieOnBadRequest();
-  return MsanReallocate(stack, nullptr, nmemb * size, sizeof(u64), true);
-}
-
 void *MsanReallocate(StackTrace *stack, void *old_p, uptr new_size,
-                     uptr alignment, bool zeroise) {
-  if (!old_p)
-    return MsanAllocate(stack, new_size, alignment, zeroise);
-  if (!new_size) {
-    MsanDeallocate(stack, old_p);
-    return nullptr;
-  }
+                     uptr alignment) {
   Metadata *meta = reinterpret_cast<Metadata*>(allocator.GetMetaData(old_p));
   uptr old_size = meta->requested_size;
   uptr actually_allocated_size = allocator.GetActuallyAllocatedSize(old_p);
@@ -203,10 +205,7 @@
     // We are not reallocating here.
     meta->requested_size = new_size;
     if (new_size > old_size) {
-      if (zeroise) {
-        __msan_clear_and_unpoison((char *)old_p + old_size,
-                                  new_size - old_size);
-      } else if (flags()->poison_in_malloc) {
+      if (flags()->poison_in_malloc) {
         stack->tag = StackTrace::TAG_ALLOC;
         PoisonMemory((char *)old_p + old_size, new_size - old_size, stack);
       }
@@ -214,8 +213,7 @@
     return old_p;
   }
   uptr memcpy_size = Min(new_size, old_size);
-  void *new_p = MsanAllocate(stack, new_size, alignment, zeroise);
-  // Printf("realloc: old_size %zd new_size %zd\n", old_size, new_size);
+  void *new_p = MsanAllocate(stack, new_size, alignment, false /*zeroise*/);
   if (new_p) {
     CopyMemory(new_p, old_p, memcpy_size, stack);
     MsanDeallocate(stack, old_p);
@@ -231,6 +229,67 @@
   return b->requested_size;
 }
 
+void *msan_malloc(uptr size, StackTrace *stack) {
+  return SetErrnoOnNull(MsanAllocate(stack, size, sizeof(u64), false));
+}
+
+void *msan_calloc(uptr nmemb, uptr size, StackTrace *stack) {
+  if (UNLIKELY(CheckForCallocOverflow(size, nmemb)))
+    return SetErrnoOnNull(Allocator::FailureHandler::OnBadRequest());
+  return SetErrnoOnNull(MsanAllocate(stack, nmemb * size, sizeof(u64), true));
+}
+
+void *msan_realloc(void *ptr, uptr size, StackTrace *stack) {
+  if (!ptr)
+    return SetErrnoOnNull(MsanAllocate(stack, size, sizeof(u64), false));
+  if (size == 0) {
+    MsanDeallocate(stack, ptr);
+    return nullptr;
+  }
+  return SetErrnoOnNull(MsanReallocate(stack, ptr, size, sizeof(u64)));
+}
+
+void *msan_valloc(uptr size, StackTrace *stack) {
+  return SetErrnoOnNull(MsanAllocate(stack, size, GetPageSizeCached(), false));
+}
+
+void *msan_pvalloc(uptr size, StackTrace *stack) {
+  uptr PageSize = GetPageSizeCached();
+  // pvalloc(0) should allocate one page.
+  size = size == 0 ? PageSize : RoundUpTo(size, PageSize);
+  return SetErrnoOnNull(MsanAllocate(stack, size, PageSize, false));
+}
+
+void *msan_aligned_alloc(uptr alignment, uptr size, StackTrace *stack) {
+  if (UNLIKELY(!CheckAlignedAllocAlignmentAndSize(alignment, size))) {
+    errno = errno_EINVAL;
+    return Allocator::FailureHandler::OnBadRequest();
+  }
+  return SetErrnoOnNull(MsanAllocate(stack, size, alignment, false));
+}
+
+void *msan_memalign(uptr alignment, uptr size, StackTrace *stack) {
+  if (UNLIKELY(!IsPowerOfTwo(alignment))) {
+    errno = errno_EINVAL;
+    return Allocator::FailureHandler::OnBadRequest();
+  }
+  return SetErrnoOnNull(MsanAllocate(stack, size, alignment, false));
+}
+
+int msan_posix_memalign(void **memptr, uptr alignment, uptr size,
+                        StackTrace *stack) {
+  if (UNLIKELY(!CheckPosixMemalignAlignment(alignment))) {
+    Allocator::FailureHandler::OnBadRequest();
+    return errno_EINVAL;
+  }
+  void *ptr = MsanAllocate(stack, size, alignment, false);
+  if (UNLIKELY(!ptr))
+    return errno_ENOMEM;
+  CHECK(IsAligned((uptr)ptr, alignment));
+  *memptr = ptr;
+  return 0;
+}
+
 } // namespace __msan
 
 using namespace __msan;
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc
index 6447bb1..b5d22ba 100644
--- a/lib/msan/msan_interceptors.cc
+++ b/lib/msan/msan_interceptors.cc
@@ -27,6 +27,7 @@
 #include "sanitizer_common/sanitizer_allocator_internal.h"
 #include "sanitizer_common/sanitizer_atomic.h"
 #include "sanitizer_common/sanitizer_common.h"
+#include "sanitizer_common/sanitizer_errno.h"
 #include "sanitizer_common/sanitizer_stackdepot.h"
 #include "sanitizer_common/sanitizer_libc.h"
 #include "sanitizer_common/sanitizer_linux.h"
@@ -48,15 +49,9 @@
 DECLARE_REAL(void *, memcpy, void *dest, const void *src, uptr n)
 DECLARE_REAL(void *, memset, void *dest, int c, uptr n)
 
-#if SANITIZER_FREEBSD
-#define __errno_location __error
-#endif
-
 // True if this is a nested interceptor.
 static THREADLOCAL int in_interceptor_scope;
 
-extern "C" int *__errno_location(void);
-
 struct InterceptorScope {
   InterceptorScope() { ++in_interceptor_scope; }
   ~InterceptorScope() { --in_interceptor_scope; }
@@ -123,14 +118,6 @@
 #define CHECK_UNPOISONED_STRING(x, n)                           \
     CHECK_UNPOISONED_STRING_OF_LEN((x), internal_strlen(x), (n))
 
-INTERCEPTOR(SIZE_T, fread, void *ptr, SIZE_T size, SIZE_T nmemb, void *file) {
-  ENSURE_MSAN_INITED();
-  SIZE_T res = REAL(fread)(ptr, size, nmemb, file);
-  if (res > 0)
-    __msan_unpoison(ptr, res *size);
-  return res;
-}
-
 #if !SANITIZER_FREEBSD
 INTERCEPTOR(SIZE_T, fread_unlocked, void *ptr, SIZE_T size, SIZE_T nmemb,
             void *file) {
@@ -174,58 +161,45 @@
 
 INTERCEPTOR(int, posix_memalign, void **memptr, SIZE_T alignment, SIZE_T size) {
   GET_MALLOC_STACK_TRACE;
-  CHECK_EQ(alignment & (alignment - 1), 0);
   CHECK_NE(memptr, 0);
-  *memptr = MsanReallocate(&stack, nullptr, size, alignment, false);
-  CHECK_NE(*memptr, 0);
-  __msan_unpoison(memptr, sizeof(*memptr));
-  return 0;
+  int res = msan_posix_memalign(memptr, alignment, size, &stack);
+  if (!res)
+    __msan_unpoison(memptr, sizeof(*memptr));
+  return res;
 }
 
 #if !SANITIZER_FREEBSD
-INTERCEPTOR(void *, memalign, SIZE_T boundary, SIZE_T size) {
+INTERCEPTOR(void *, memalign, SIZE_T alignment, SIZE_T size) {
   GET_MALLOC_STACK_TRACE;
-  CHECK_EQ(boundary & (boundary - 1), 0);
-  void *ptr = MsanReallocate(&stack, nullptr, size, boundary, false);
-  return ptr;
+  return msan_memalign(alignment, size, &stack);
 }
 #define MSAN_MAYBE_INTERCEPT_MEMALIGN INTERCEPT_FUNCTION(memalign)
 #else
 #define MSAN_MAYBE_INTERCEPT_MEMALIGN
 #endif
 
-INTERCEPTOR(void *, aligned_alloc, SIZE_T boundary, SIZE_T size) {
+INTERCEPTOR(void *, aligned_alloc, SIZE_T alignment, SIZE_T size) {
   GET_MALLOC_STACK_TRACE;
-  CHECK_EQ(boundary & (boundary - 1), 0);
-  void *ptr = MsanReallocate(&stack, nullptr, size, boundary, false);
-  return ptr;
+  return msan_aligned_alloc(alignment, size, &stack);
 }
 
-INTERCEPTOR(void *, __libc_memalign, SIZE_T boundary, SIZE_T size) {
+INTERCEPTOR(void *, __libc_memalign, SIZE_T alignment, SIZE_T size) {
   GET_MALLOC_STACK_TRACE;
-  CHECK_EQ(boundary & (boundary - 1), 0);
-  void *ptr = MsanReallocate(&stack, nullptr, size, boundary, false);
-  DTLS_on_libc_memalign(ptr, size);
+  void *ptr = msan_memalign(alignment, size, &stack);
+  if (ptr)
+    DTLS_on_libc_memalign(ptr, size);
   return ptr;
 }
 
 INTERCEPTOR(void *, valloc, SIZE_T size) {
   GET_MALLOC_STACK_TRACE;
-  void *ptr = MsanReallocate(&stack, nullptr, size, GetPageSizeCached(), false);
-  return ptr;
+  return msan_valloc(size, &stack);
 }
 
 #if !SANITIZER_FREEBSD
 INTERCEPTOR(void *, pvalloc, SIZE_T size) {
   GET_MALLOC_STACK_TRACE;
-  uptr PageSize = GetPageSizeCached();
-  size = RoundUpTo(size, PageSize);
-  if (size == 0) {
-    // pvalloc(0) should allocate one page.
-    size = PageSize;
-  }
-  void *ptr = MsanReallocate(&stack, nullptr, size, PageSize, false);
-  return ptr;
+  return msan_pvalloc(size, &stack);
 }
 #define MSAN_MAYBE_INTERCEPT_PVALLOC INTERCEPT_FUNCTION(pvalloc)
 #else
@@ -349,33 +323,6 @@
 #define MSAN_MAYBE_INTERCEPT___STRDUP
 #endif
 
-INTERCEPTOR(char *, strndup, char *src, SIZE_T n) {
-  ENSURE_MSAN_INITED();
-  GET_STORE_STACK_TRACE;
-  // On FreeBSD strndup() leverages strnlen().
-  InterceptorScope interceptor_scope;
-  SIZE_T copy_size = REAL(strnlen)(src, n);
-  char *res = REAL(strndup)(src, n);
-  CopyShadowAndOrigin(res, src, copy_size, &stack);
-  __msan_unpoison(res + copy_size, 1); // \0
-  return res;
-}
-
-#if !SANITIZER_FREEBSD
-INTERCEPTOR(char *, __strndup, char *src, SIZE_T n) {
-  ENSURE_MSAN_INITED();
-  GET_STORE_STACK_TRACE;
-  SIZE_T copy_size = REAL(strnlen)(src, n);
-  char *res = REAL(__strndup)(src, n);
-  CopyShadowAndOrigin(res, src, copy_size, &stack);
-  __msan_unpoison(res + copy_size, 1); // \0
-  return res;
-}
-#define MSAN_MAYBE_INTERCEPT___STRNDUP INTERCEPT_FUNCTION(__strndup)
-#else
-#define MSAN_MAYBE_INTERCEPT___STRNDUP
-#endif
-
 INTERCEPTOR(char *, gcvt, double number, SIZE_T ndigit, char *buf) {
   ENSURE_MSAN_INITED();
   char *res = REAL(gcvt)(number, ndigit, buf);
@@ -573,30 +520,6 @@
   return res;
 }
 
-INTERCEPTOR(SIZE_T, wcslen, const wchar_t *s) {
-  ENSURE_MSAN_INITED();
-  SIZE_T res = REAL(wcslen)(s);
-  CHECK_UNPOISONED(s, sizeof(wchar_t) * (res + 1));
-  return res;
-}
-
-// wchar_t *wcschr(const wchar_t *wcs, wchar_t wc);
-INTERCEPTOR(wchar_t *, wcschr, void *s, wchar_t wc, void *ps) {
-  ENSURE_MSAN_INITED();
-  wchar_t *res = REAL(wcschr)(s, wc, ps);
-  return res;
-}
-
-// wchar_t *wcscpy(wchar_t *dest, const wchar_t *src);
-INTERCEPTOR(wchar_t *, wcscpy, wchar_t *dest, const wchar_t *src) {
-  ENSURE_MSAN_INITED();
-  GET_STORE_STACK_TRACE;
-  wchar_t *res = REAL(wcscpy)(dest, src);
-  CopyShadowAndOrigin(dest, src, sizeof(wchar_t) * (REAL(wcslen)(src) + 1),
-                      &stack);
-  return res;
-}
-
 // wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, SIZE_T n);
 INTERCEPTOR(wchar_t *, wmemcpy, wchar_t *dest, const wchar_t *src, SIZE_T n) {
   ENSURE_MSAN_INITED();
@@ -917,7 +840,7 @@
   if (UNLIKELY(!msan_inited))
     // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym.
     return AllocateFromLocalPool(nmemb * size);
-  return MsanCalloc(&stack, nmemb, size);
+  return msan_calloc(nmemb, size, &stack);
 }
 
 INTERCEPTOR(void *, realloc, void *ptr, SIZE_T size) {
@@ -930,12 +853,12 @@
       new_ptr = AllocateFromLocalPool(copy_size);
     } else {
       copy_size = size;
-      new_ptr = MsanReallocate(&stack, nullptr, copy_size, sizeof(u64), false);
+      new_ptr = msan_malloc(copy_size, &stack);
     }
     internal_memcpy(new_ptr, ptr, copy_size);
     return new_ptr;
   }
-  return MsanReallocate(&stack, ptr, size, sizeof(u64), false);
+  return msan_realloc(ptr, size, &stack);
 }
 
 INTERCEPTOR(void *, malloc, SIZE_T size) {
@@ -943,7 +866,7 @@
   if (UNLIKELY(!msan_inited))
     // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym.
     return AllocateFromLocalPool(size);
-  return MsanReallocate(&stack, nullptr, size, sizeof(u64), false);
+  return msan_malloc(size, &stack);
 }
 
 void __msan_allocated_memory(const void *data, uptr size) {
@@ -974,7 +897,7 @@
   ENSURE_MSAN_INITED();
   if (addr && !MEM_IS_APP(addr)) {
     if (flags & map_fixed) {
-      *__errno_location() = errno_EINVAL;
+      errno = errno_EINVAL;
       return (void *)-1;
     } else {
       addr = nullptr;
@@ -992,7 +915,7 @@
   ENSURE_MSAN_INITED();
   if (addr && !MEM_IS_APP(addr)) {
     if (flags & map_fixed) {
-      *__errno_location() = errno_EINVAL;
+      errno = errno_EINVAL;
       return (void *)-1;
     } else {
       addr = nullptr;
@@ -1360,6 +1283,13 @@
     return __msan_memcpy(to, from, size);                   \
   }
 
+#define COMMON_INTERCEPTOR_COPY_STRING(ctx, to, from, size) \
+  do {                                                      \
+    GET_STORE_STACK_TRACE;                                  \
+    CopyShadowAndOrigin(to, from, size, &stack);            \
+    __msan_unpoison(to + size, 1);                          \
+  } while (false)
+
 #include "sanitizer_common/sanitizer_platform_interceptors.h"
 #include "sanitizer_common/sanitizer_common_interceptors.inc"
 
@@ -1433,6 +1363,35 @@
   return res;
 }
 
+// wchar_t *wcschr(const wchar_t *wcs, wchar_t wc);
+INTERCEPTOR(wchar_t *, wcschr, void *s, wchar_t wc, void *ps) {
+  ENSURE_MSAN_INITED();
+  wchar_t *res = REAL(wcschr)(s, wc, ps);
+  return res;
+}
+
+// wchar_t *wcscpy(wchar_t *dest, const wchar_t *src);
+INTERCEPTOR(wchar_t *, wcscpy, wchar_t *dest, const wchar_t *src) {
+  ENSURE_MSAN_INITED();
+  GET_STORE_STACK_TRACE;
+  wchar_t *res = REAL(wcscpy)(dest, src);
+  CopyShadowAndOrigin(dest, src, sizeof(wchar_t) * (REAL(wcslen)(src) + 1),
+                      &stack);
+  return res;
+}
+
+INTERCEPTOR(wchar_t *, wcsncpy, wchar_t *dest, const wchar_t *src,
+            SIZE_T n) {  // NOLINT
+  ENSURE_MSAN_INITED();
+  GET_STORE_STACK_TRACE;
+  SIZE_T copy_size = REAL(wcsnlen)(src, n);
+  if (copy_size < n) copy_size++;           // trailing \0
+  wchar_t *res = REAL(wcsncpy)(dest, src, n);  // NOLINT
+  CopyShadowAndOrigin(dest, src, copy_size * sizeof(wchar_t), &stack);
+  __msan_unpoison(dest + copy_size, (n - copy_size) * sizeof(wchar_t));
+  return res;
+}
+
 // These interface functions reside here so that they can use
 // REAL(memset), etc.
 void __msan_unpoison(const void *a, uptr size) {
@@ -1527,8 +1486,6 @@
   INTERCEPT_FUNCTION(stpcpy);  // NOLINT
   INTERCEPT_FUNCTION(strdup);
   MSAN_MAYBE_INTERCEPT___STRDUP;
-  INTERCEPT_FUNCTION(strndup);
-  MSAN_MAYBE_INTERCEPT___STRNDUP;
   INTERCEPT_FUNCTION(strncpy);  // NOLINT
   INTERCEPT_FUNCTION(gcvt);
   INTERCEPT_FUNCTION(strcat);  // NOLINT
@@ -1565,8 +1522,10 @@
   INTERCEPT_FUNCTION(mbtowc);
   INTERCEPT_FUNCTION(mbrtowc);
   INTERCEPT_FUNCTION(wcslen);
+  INTERCEPT_FUNCTION(wcsnlen);
   INTERCEPT_FUNCTION(wcschr);
   INTERCEPT_FUNCTION(wcscpy);
+  INTERCEPT_FUNCTION(wcsncpy);
   INTERCEPT_FUNCTION(wcscmp);
   INTERCEPT_FUNCTION(getenv);
   INTERCEPT_FUNCTION(setenv);
diff --git a/lib/msan/msan_new_delete.cc b/lib/msan/msan_new_delete.cc
index 5401003..7219267 100644
--- a/lib/msan/msan_new_delete.cc
+++ b/lib/msan/msan_new_delete.cc
@@ -14,6 +14,7 @@
 
 #include "msan.h"
 #include "interception/interception.h"
+#include "sanitizer_common/sanitizer_allocator.h"
 
 #if MSAN_REPLACE_OPERATORS_NEW_AND_DELETE
 
@@ -27,18 +28,25 @@
 }  // namespace std
 
 
-#define OPERATOR_NEW_BODY \
+// TODO(alekseys): throw std::bad_alloc instead of dying on OOM.
+#define OPERATOR_NEW_BODY(nothrow) \
   GET_MALLOC_STACK_TRACE; \
-  return MsanReallocate(&stack, 0, size, sizeof(u64), false)
+  void *res = msan_malloc(size, &stack);\
+  if (!nothrow && UNLIKELY(!res)) DieOnFailure::OnOOM();\
+  return res
 
 INTERCEPTOR_ATTRIBUTE
-void *operator new(size_t size) { OPERATOR_NEW_BODY; }
+void *operator new(size_t size) { OPERATOR_NEW_BODY(false /*nothrow*/); }
 INTERCEPTOR_ATTRIBUTE
-void *operator new[](size_t size) { OPERATOR_NEW_BODY; }
+void *operator new[](size_t size) { OPERATOR_NEW_BODY(false /*nothrow*/); }
 INTERCEPTOR_ATTRIBUTE
-void *operator new(size_t size, std::nothrow_t const&) { OPERATOR_NEW_BODY; }
+void *operator new(size_t size, std::nothrow_t const&) {
+  OPERATOR_NEW_BODY(true /*nothrow*/);
+}
 INTERCEPTOR_ATTRIBUTE
-void *operator new[](size_t size, std::nothrow_t const&) { OPERATOR_NEW_BODY; }
+void *operator new[](size_t size, std::nothrow_t const&) {
+  OPERATOR_NEW_BODY(true /*nothrow*/);
+}
 
 #define OPERATOR_DELETE_BODY \
   GET_MALLOC_STACK_TRACE; \
diff --git a/lib/msan/tests/CMakeLists.txt b/lib/msan/tests/CMakeLists.txt
index 8e911dc..65fbc73 100644
--- a/lib/msan/tests/CMakeLists.txt
+++ b/lib/msan/tests/CMakeLists.txt
@@ -35,6 +35,7 @@
   -Wno-zero-length-array
   -Wno-uninitialized
   -Werror=sign-compare
+  -Wno-gnu-zero-variadic-macro-arguments
 )
 set(MSAN_UNITTEST_INSTRUMENTED_CFLAGS
   ${MSAN_UNITTEST_COMMON_CFLAGS}
diff --git a/lib/msan/tests/msan_test.cc b/lib/msan/tests/msan_test.cc
index b68fbac..b2d5f7c 100644
--- a/lib/msan/tests/msan_test.cc
+++ b/lib/msan/tests/msan_test.cc
@@ -175,10 +175,16 @@
 }
 
 #define EXPECT_NOT_POISONED(x) EXPECT_EQ(true, TestForNotPoisoned((x)))
+#define EXPECT_NOT_POISONED2(data, size) \
+  EXPECT_EQ(true, TestForNotPoisoned((data), (size)))
+
+bool TestForNotPoisoned(const void *data, size_t size) {
+  return __msan_test_shadow(data, size) == -1;
+}
 
 template<typename T>
 bool TestForNotPoisoned(const T& t) {
-  return __msan_test_shadow((void*)&t, sizeof(t)) == -1;
+  return TestForNotPoisoned((void *)&t, sizeof(t));
 }
 
 static U8 poisoned_array[100];
@@ -879,92 +885,203 @@
   close(sock);
 }
 
-TEST(MemorySanitizer, accept) {
-  int listen_socket = socket(AF_INET, SOCK_STREAM, 0);
+class SocketAddr {
+ public:
+  virtual ~SocketAddr() = default;
+  virtual struct sockaddr *ptr() = 0;
+  virtual size_t size() const = 0;
+
+  template <class... Args>
+  static std::unique_ptr<SocketAddr> Create(int family, Args... args);
+};
+
+class SocketAddr4 : public SocketAddr {
+ public:
+  SocketAddr4() { EXPECT_POISONED(sai_); }
+  explicit SocketAddr4(uint16_t port) {
+    memset(&sai_, 0, sizeof(sai_));
+    sai_.sin_family = AF_INET;
+    sai_.sin_port = port;
+    sai_.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+  }
+
+  sockaddr *ptr() override { return reinterpret_cast<sockaddr *>(&sai_); }
+
+  size_t size() const override { return sizeof(sai_); }
+
+ private:
+  sockaddr_in sai_;
+};
+
+class SocketAddr6 : public SocketAddr {
+ public:
+  SocketAddr6() { EXPECT_POISONED(sai_); }
+  explicit SocketAddr6(uint16_t port) {
+    memset(&sai_, 0, sizeof(sai_));
+    sai_.sin6_family = AF_INET6;
+    sai_.sin6_port = port;
+    sai_.sin6_addr = in6addr_loopback;
+  }
+
+  sockaddr *ptr() override { return reinterpret_cast<sockaddr *>(&sai_); }
+
+  size_t size() const override { return sizeof(sai_); }
+
+ private:
+  sockaddr_in6 sai_;
+};
+
+template <class... Args>
+std::unique_ptr<SocketAddr> SocketAddr::Create(int family, Args... args) {
+  if (family == AF_INET)
+    return std::unique_ptr<SocketAddr>(new SocketAddr4(args...));
+  return std::unique_ptr<SocketAddr>(new SocketAddr6(args...));
+}
+
+class MemorySanitizerIpTest : public ::testing::TestWithParam<int> {
+ public:
+  void SetUp() override {
+    ASSERT_TRUE(GetParam() == AF_INET || GetParam() == AF_INET6);
+  }
+
+  template <class... Args>
+  std::unique_ptr<SocketAddr> CreateSockAddr(Args... args) const {
+    return SocketAddr::Create(GetParam(), args...);
+  }
+
+  int CreateSocket(int socket_type) const {
+    return socket(GetParam(), socket_type, 0);
+  }
+};
+
+std::vector<int> GetAvailableIpSocketFamilies() {
+  std::vector<int> result;
+
+  for (int i : {AF_INET, AF_INET6}) {
+    int s = socket(i, SOCK_STREAM, 0);
+    if (s > 0) {
+      auto sai = SocketAddr::Create(i, 0);
+      if (bind(s, sai->ptr(), sai->size()) == 0) result.push_back(i);
+      close(s);
+    }
+  }
+
+  return result;
+}
+
+INSTANTIATE_TEST_CASE_P(IpTests, MemorySanitizerIpTest,
+                        ::testing::ValuesIn(GetAvailableIpSocketFamilies()));
+
+TEST_P(MemorySanitizerIpTest, accept) {
+  int listen_socket = CreateSocket(SOCK_STREAM);
   ASSERT_LT(0, listen_socket);
 
-  struct sockaddr_in sai;
-  memset(&sai, 0, sizeof(sai));
-  sai.sin_family = AF_INET;
-  sai.sin_port = 0;
-  sai.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-  int res = bind(listen_socket, (struct sockaddr *)&sai, sizeof(sai));
+  auto sai = CreateSockAddr(0);
+  int res = bind(listen_socket, sai->ptr(), sai->size());
   ASSERT_EQ(0, res);
 
   res = listen(listen_socket, 1);
   ASSERT_EQ(0, res);
 
-  socklen_t sz = sizeof(sai);
-  res = getsockname(listen_socket, (struct sockaddr *)&sai, &sz);
+  socklen_t sz = sai->size();
+  res = getsockname(listen_socket, sai->ptr(), &sz);
   ASSERT_EQ(0, res);
-  ASSERT_EQ(sizeof(sai), sz);
+  ASSERT_EQ(sai->size(), sz);
 
-  int connect_socket = socket(AF_INET, SOCK_STREAM, 0);
+  int connect_socket = CreateSocket(SOCK_STREAM);
   ASSERT_LT(0, connect_socket);
   res = fcntl(connect_socket, F_SETFL, O_NONBLOCK);
   ASSERT_EQ(0, res);
-  res = connect(connect_socket, (struct sockaddr *)&sai, sizeof(sai));
+  res = connect(connect_socket, sai->ptr(), sai->size());
   // On FreeBSD this connection completes immediately.
   if (res != 0) {
     ASSERT_EQ(-1, res);
     ASSERT_EQ(EINPROGRESS, errno);
   }
 
-  __msan_poison(&sai, sizeof(sai));
-  int new_sock = accept(listen_socket, (struct sockaddr *)&sai, &sz);
+  __msan_poison(sai->ptr(), sai->size());
+  int new_sock = accept(listen_socket, sai->ptr(), &sz);
   ASSERT_LT(0, new_sock);
-  ASSERT_EQ(sizeof(sai), sz);
-  EXPECT_NOT_POISONED(sai);
+  ASSERT_EQ(sai->size(), sz);
+  EXPECT_NOT_POISONED2(sai->ptr(), sai->size());
 
-  __msan_poison(&sai, sizeof(sai));
-  res = getpeername(new_sock, (struct sockaddr *)&sai, &sz);
+  __msan_poison(sai->ptr(), sai->size());
+  res = getpeername(new_sock, sai->ptr(), &sz);
   ASSERT_EQ(0, res);
-  ASSERT_EQ(sizeof(sai), sz);
-  EXPECT_NOT_POISONED(sai);
+  ASSERT_EQ(sai->size(), sz);
+  EXPECT_NOT_POISONED2(sai->ptr(), sai->size());
 
   close(new_sock);
   close(connect_socket);
   close(listen_socket);
 }
 
-TEST(MemorySanitizer, getaddrinfo) {
-  struct addrinfo *ai;
-  struct addrinfo hints;
-  memset(&hints, 0, sizeof(hints));
-  hints.ai_family = AF_INET;
-  int res = getaddrinfo("localhost", NULL, &hints, &ai);
-  ASSERT_EQ(0, res);
-  EXPECT_NOT_POISONED(*ai);
-  ASSERT_EQ(sizeof(sockaddr_in), ai->ai_addrlen);
-  EXPECT_NOT_POISONED(*(sockaddr_in*)ai->ai_addr); 
-}
+TEST_P(MemorySanitizerIpTest, recvmsg) {
+  int server_socket = CreateSocket(SOCK_DGRAM);
+  ASSERT_LT(0, server_socket);
 
-TEST(MemorySanitizer, getnameinfo) {
-  struct sockaddr_in sai;
-  memset(&sai, 0, sizeof(sai));
-  sai.sin_family = AF_INET;
-  sai.sin_port = 80;
-  sai.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-  char host[500];
-  char serv[500];
-  int res = getnameinfo((struct sockaddr *)&sai, sizeof(sai), host,
-                        sizeof(host), serv, sizeof(serv), 0);
+  auto sai = CreateSockAddr(0);
+  int res = bind(server_socket, sai->ptr(), sai->size());
   ASSERT_EQ(0, res);
-  EXPECT_NOT_POISONED(host[0]);
-  EXPECT_POISONED(host[sizeof(host) - 1]);
 
-  ASSERT_NE(0U, strlen(host));
-  EXPECT_NOT_POISONED(serv[0]);
-  EXPECT_POISONED(serv[sizeof(serv) - 1]);
-  ASSERT_NE(0U, strlen(serv));
+  socklen_t sz = sai->size();
+  res = getsockname(server_socket, sai->ptr(), &sz);
+  ASSERT_EQ(0, res);
+  ASSERT_EQ(sai->size(), sz);
+
+  int client_socket = CreateSocket(SOCK_DGRAM);
+  ASSERT_LT(0, client_socket);
+
+  auto client_sai = CreateSockAddr(0);
+  res = bind(client_socket, client_sai->ptr(), client_sai->size());
+  ASSERT_EQ(0, res);
+
+  sz = client_sai->size();
+  res = getsockname(client_socket, client_sai->ptr(), &sz);
+  ASSERT_EQ(0, res);
+  ASSERT_EQ(client_sai->size(), sz);
+
+  const char *s = "message text";
+  struct iovec iov;
+  iov.iov_base = (void *)s;
+  iov.iov_len = strlen(s) + 1;
+  struct msghdr msg;
+  memset(&msg, 0, sizeof(msg));
+  msg.msg_name = sai->ptr();
+  msg.msg_namelen = sai->size();
+  msg.msg_iov = &iov;
+  msg.msg_iovlen = 1;
+  res = sendmsg(client_socket, &msg, 0);
+  ASSERT_LT(0, res);
+
+  char buf[1000];
+  struct iovec recv_iov;
+  recv_iov.iov_base = (void *)&buf;
+  recv_iov.iov_len = sizeof(buf);
+  auto recv_sai = CreateSockAddr();
+  struct msghdr recv_msg;
+  memset(&recv_msg, 0, sizeof(recv_msg));
+  recv_msg.msg_name = recv_sai->ptr();
+  recv_msg.msg_namelen = recv_sai->size();
+  recv_msg.msg_iov = &recv_iov;
+  recv_msg.msg_iovlen = 1;
+  res = recvmsg(server_socket, &recv_msg, 0);
+  ASSERT_LT(0, res);
+
+  ASSERT_EQ(recv_sai->size(), recv_msg.msg_namelen);
+  EXPECT_NOT_POISONED2(recv_sai->ptr(), recv_sai->size());
+  EXPECT_STREQ(s, buf);
+
+  close(server_socket);
+  close(client_socket);
 }
 
 #define EXPECT_HOSTENT_NOT_POISONED(he)        \
   do {                                         \
     EXPECT_NOT_POISONED(*(he));                \
-    ASSERT_NE((void *) 0, (he)->h_name);       \
-    ASSERT_NE((void *) 0, (he)->h_aliases);    \
-    ASSERT_NE((void *) 0, (he)->h_addr_list);  \
+    ASSERT_NE((void *)0, (he)->h_name);        \
+    ASSERT_NE((void *)0, (he)->h_aliases);     \
+    ASSERT_NE((void *)0, (he)->h_addr_list);   \
     EXPECT_NOT_POISONED(strlen((he)->h_name)); \
     char **p = (he)->h_aliases;                \
     while (*p) {                               \
@@ -993,76 +1110,38 @@
   EXPECT_HOSTENT_NOT_POISONED(he);
 }
 
-#endif // MSAN_TEST_DISABLE_GETHOSTBYNAME
+#endif  // MSAN_TEST_DISABLE_GETHOSTBYNAME
 
-TEST(MemorySanitizer, recvmsg) {
-  int server_socket = socket(AF_INET, SOCK_DGRAM, 0);
-  ASSERT_LT(0, server_socket);
+TEST(MemorySanitizer, getaddrinfo) {
+  struct addrinfo *ai;
+  struct addrinfo hints;
+  memset(&hints, 0, sizeof(hints));
+  hints.ai_family = AF_INET;
+  int res = getaddrinfo("localhost", NULL, &hints, &ai);
+  ASSERT_EQ(0, res);
+  EXPECT_NOT_POISONED(*ai);
+  ASSERT_EQ(sizeof(sockaddr_in), ai->ai_addrlen);
+  EXPECT_NOT_POISONED(*(sockaddr_in *)ai->ai_addr);
+}
 
+TEST(MemorySanitizer, getnameinfo) {
   struct sockaddr_in sai;
   memset(&sai, 0, sizeof(sai));
   sai.sin_family = AF_INET;
-  sai.sin_port = 0;
+  sai.sin_port = 80;
   sai.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-  int res = bind(server_socket, (struct sockaddr *)&sai, sizeof(sai));
+  char host[500];
+  char serv[500];
+  int res = getnameinfo((struct sockaddr *)&sai, sizeof(sai), host,
+                        sizeof(host), serv, sizeof(serv), 0);
   ASSERT_EQ(0, res);
+  EXPECT_NOT_POISONED(host[0]);
+  EXPECT_POISONED(host[sizeof(host) - 1]);
 
-  socklen_t sz = sizeof(sai);
-  res = getsockname(server_socket, (struct sockaddr *)&sai, &sz);
-  ASSERT_EQ(0, res);
-  ASSERT_EQ(sizeof(sai), sz);
-
-
-  int client_socket = socket(AF_INET, SOCK_DGRAM, 0);
-  ASSERT_LT(0, client_socket);
-
-  struct sockaddr_in client_sai;
-  memset(&client_sai, 0, sizeof(client_sai));
-  client_sai.sin_family = AF_INET;
-  client_sai.sin_port = 0;
-  client_sai.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-  res = bind(client_socket, (struct sockaddr *)&client_sai, sizeof(client_sai));
-  ASSERT_EQ(0, res);
-
-  sz = sizeof(client_sai);
-  res = getsockname(client_socket, (struct sockaddr *)&client_sai, &sz);
-  ASSERT_EQ(0, res);
-  ASSERT_EQ(sizeof(client_sai), sz);
-
-  const char *s = "message text";
-  struct iovec iov;
-  iov.iov_base = (void *)s;
-  iov.iov_len = strlen(s) + 1;
-  struct msghdr msg;
-  memset(&msg, 0, sizeof(msg));
-  msg.msg_name = &sai;
-  msg.msg_namelen = sizeof(sai);
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-  res = sendmsg(client_socket, &msg, 0);
-  ASSERT_LT(0, res);
-
-
-  char buf[1000];
-  struct iovec recv_iov;
-  recv_iov.iov_base = (void *)&buf;
-  recv_iov.iov_len = sizeof(buf);
-  struct sockaddr_in recv_sai;
-  struct msghdr recv_msg;
-  memset(&recv_msg, 0, sizeof(recv_msg));
-  recv_msg.msg_name = &recv_sai;
-  recv_msg.msg_namelen = sizeof(recv_sai);
-  recv_msg.msg_iov = &recv_iov;
-  recv_msg.msg_iovlen = 1;
-  res = recvmsg(server_socket, &recv_msg, 0);
-  ASSERT_LT(0, res);
-
-  ASSERT_EQ(sizeof(recv_sai), recv_msg.msg_namelen);
-  EXPECT_NOT_POISONED(*(struct sockaddr_in *)recv_msg.msg_name);
-  EXPECT_STREQ(s, buf);
-
-  close(server_socket);
-  close(client_socket);
+  ASSERT_NE(0U, strlen(host));
+  EXPECT_NOT_POISONED(serv[0]);
+  EXPECT_POISONED(serv[sizeof(serv) - 1]);
+  ASSERT_NE(0U, strlen(serv));
 }
 
 TEST(MemorySanitizer, gethostbyname2) {
@@ -1502,19 +1581,28 @@
 TEST(MemorySanitizer, strndup) {
   char buf[4] = "abc";
   __msan_poison(buf + 2, sizeof(*buf));
-  char *x = strndup(buf, 3);
+  char *x;
+  EXPECT_UMR(x = strndup(buf, 3));
   EXPECT_NOT_POISONED(x[0]);
   EXPECT_NOT_POISONED(x[1]);
   EXPECT_POISONED(x[2]);
   EXPECT_NOT_POISONED(x[3]);
   free(x);
+  // Check handling of non 0 terminated strings.
+  buf[3] = 'z';
+  __msan_poison(buf + 3, sizeof(*buf));
+  EXPECT_UMR(x = strndup(buf + 3, 1));
+  EXPECT_POISONED(x[0]);
+  EXPECT_NOT_POISONED(x[1]);
+  free(x);
 }
 
 TEST(MemorySanitizer, strndup_short) {
   char buf[4] = "abc";
   __msan_poison(buf + 1, sizeof(*buf));
   __msan_poison(buf + 2, sizeof(*buf));
-  char *x = strndup(buf, 2);
+  char *x;
+  EXPECT_UMR(x = strndup(buf, 2));
   EXPECT_NOT_POISONED(x[0]);
   EXPECT_POISONED(x[1]);
   EXPECT_NOT_POISONED(x[2]);
@@ -1619,6 +1707,48 @@
   EXPECT_POISONED(a[7]);
 }
 
+TEST(MemorySanitizer, wcscat) {
+  wchar_t a[10];
+  wchar_t b[] = L"def";
+  wcscpy(a, L"abc");
+
+  wcscat(a, b);
+  EXPECT_EQ(6U, wcslen(a));
+  EXPECT_POISONED(a[7]);
+
+  a[3] = 0;
+  __msan_poison(b + 1, sizeof(wchar_t));
+  EXPECT_UMR(wcscat(a, b));
+
+  __msan_unpoison(b + 1, sizeof(wchar_t));
+  __msan_poison(a + 2, sizeof(wchar_t));
+  EXPECT_UMR(wcscat(a, b));
+}
+
+TEST(MemorySanitizer, wcsncat) {
+  wchar_t a[10];
+  wchar_t b[] = L"def";
+  wcscpy(a, L"abc");
+
+  wcsncat(a, b, 5);
+  EXPECT_EQ(6U, wcslen(a));
+  EXPECT_POISONED(a[7]);
+
+  a[3] = 0;
+  __msan_poison(a + 4, sizeof(wchar_t) * 6);
+  wcsncat(a, b, 2);
+  EXPECT_EQ(5U, wcslen(a));
+  EXPECT_POISONED(a[6]);
+
+  a[3] = 0;
+  __msan_poison(b + 1, sizeof(wchar_t));
+  EXPECT_UMR(wcsncat(a, b, 2));
+
+  __msan_unpoison(b + 1, sizeof(wchar_t));
+  __msan_poison(a + 2, sizeof(wchar_t));
+  EXPECT_UMR(wcsncat(a, b, 2));
+}
+
 #define TEST_STRTO_INT(func_name, char_type, str_prefix) \
   TEST(MemorySanitizer, func_name) {                     \
     char_type *e;                                        \
@@ -3546,6 +3676,21 @@
     EXPECT_NOT_POISONED(gids[i]);
 }
 
+TEST(MemorySanitizer, getgroups_zero) {
+  gid_t group;
+  int n = getgroups(0, &group);
+  ASSERT_GE(n, 0);
+}
+
+TEST(MemorySanitizer, getgroups_negative) {
+  gid_t group;
+  int n = getgroups(-1, 0);
+  ASSERT_EQ(-1, n);
+
+  n = getgroups(-1, 0);
+  ASSERT_EQ(-1, n);
+}
+
 TEST(MemorySanitizer, wordexp) {
   wordexp_t w;
   int res = wordexp("a b c", &w, 0);
@@ -3628,8 +3773,10 @@
 
   EXPECT_POISONED(poisoned(6, 0xF) > poisoned(7, 0));
   EXPECT_POISONED(poisoned(0xF, 0xF) > poisoned(7, 0));
-
-  EXPECT_NOT_POISONED(poisoned(-1, 0x80000000U) >= poisoned(-1, 0U));
+  // Note that "icmp op X, Y" is approximated with "or shadow(X), shadow(Y)"
+  // and therefore may generate false positives in some cases, e.g. the
+  // following one:
+  // EXPECT_NOT_POISONED(poisoned(-1, 0x80000000U) >= poisoned(-1, 0U));
 }
 
 #if MSAN_HAS_M128
@@ -3646,6 +3793,18 @@
   EXPECT_POISONED(_mm_cmpgt_epi16(poisoned(_mm_set1_epi16(6), _mm_set1_epi16(0xF)),
                                poisoned(_mm_set1_epi16(7), _mm_set1_epi16(0))));
 }
+
+TEST(MemorySanitizer, stmxcsr_ldmxcsr) {
+  U4 x = _mm_getcsr();
+  EXPECT_NOT_POISONED(x);
+
+  _mm_setcsr(x);
+
+  __msan_poison(&x, sizeof(x));
+  U4 origin = __LINE__;
+  __msan_set_origin(&x, sizeof(x), origin);
+  EXPECT_UMR_O(_mm_setcsr(x), origin);
+}
 #endif
 
 // Volatile bitfield store is implemented as load-mask-store
diff --git a/lib/profile/InstrProfData.inc b/lib/profile/InstrProfData.inc
index f7c22d1..be0dd4a 100644
--- a/lib/profile/InstrProfData.inc
+++ b/lib/profile/InstrProfData.inc
@@ -153,7 +153,17 @@
 VALUE_PROF_FUNC_PARAM(uint64_t, TargetValue, Type::getInt64Ty(Ctx)) \
                       INSTR_PROF_COMMA
 VALUE_PROF_FUNC_PARAM(void *, Data, Type::getInt8PtrTy(Ctx)) INSTR_PROF_COMMA
+#ifndef VALUE_RANGE_PROF
 VALUE_PROF_FUNC_PARAM(uint32_t, CounterIndex, Type::getInt32Ty(Ctx))
+#else /* VALUE_RANGE_PROF */
+VALUE_PROF_FUNC_PARAM(uint32_t, CounterIndex, Type::getInt32Ty(Ctx)) \
+                      INSTR_PROF_COMMA
+VALUE_PROF_FUNC_PARAM(uint64_t, PreciseRangeStart, Type::getInt64Ty(Ctx)) \
+                      INSTR_PROF_COMMA
+VALUE_PROF_FUNC_PARAM(uint64_t, PreciseRangeLast, Type::getInt64Ty(Ctx)) \
+                      INSTR_PROF_COMMA
+VALUE_PROF_FUNC_PARAM(uint64_t, LargeValue, Type::getInt64Ty(Ctx))
+#endif /*VALUE_RANGE_PROF */
 #undef VALUE_PROF_FUNC_PARAM
 #undef INSTR_PROF_COMMA
 /* VALUE_PROF_FUNC_PARAM end */
@@ -174,13 +184,15 @@
  * name hash and the function address.
  */
 VALUE_PROF_KIND(IPVK_IndirectCallTarget, 0)
+/* For memory intrinsic functions size profiling. */
+VALUE_PROF_KIND(IPVK_MemOPSize, 1)
 /* These two kinds must be the last to be
  * declared. This is to make sure the string
  * array created with the template can be
  * indexed with the kind value.
  */
 VALUE_PROF_KIND(IPVK_First, IPVK_IndirectCallTarget)
-VALUE_PROF_KIND(IPVK_Last, IPVK_IndirectCallTarget)
+VALUE_PROF_KIND(IPVK_Last, IPVK_MemOPSize)
 
 #undef VALUE_PROF_KIND
 /* VALUE_PROF_KIND end */
@@ -234,6 +246,31 @@
 /* COVMAP_HEADER end.  */
 
 
+#ifdef INSTR_PROF_SECT_ENTRY
+#define INSTR_PROF_DATA_DEFINED
+INSTR_PROF_SECT_ENTRY(IPSK_data, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_DATA_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_DATA_COFF), "__DATA,")
+INSTR_PROF_SECT_ENTRY(IPSK_cnts, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_CNTS_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_CNTS_COFF), "__DATA,")
+INSTR_PROF_SECT_ENTRY(IPSK_name, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_NAME_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_NAME_COFF), "__DATA,")
+INSTR_PROF_SECT_ENTRY(IPSK_vals, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_VALS_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_VALS_COFF), "__DATA,")
+INSTR_PROF_SECT_ENTRY(IPSK_vnodes, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_VNODES_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_VNODES_COFF), "__DATA,")
+INSTR_PROF_SECT_ENTRY(IPSK_covmap, \
+                      INSTR_PROF_QUOTE(INSTR_PROF_COVMAP_COMMON), \
+                      INSTR_PROF_QUOTE(INSTR_PROF_COVMAP_COFF), "__LLVM_COV,")
+
+#undef INSTR_PROF_SECT_ENTRY
+#endif
+
+
 #ifdef INSTR_PROF_VALUE_PROF_DATA
 #define INSTR_PROF_DATA_DEFINED
 
@@ -610,17 +647,47 @@
  * specified via command line. */
 #define INSTR_PROF_PROFILE_NAME_VAR __llvm_profile_filename
 
+/* section name strings common to all targets other
+   than WIN32 */
+#define INSTR_PROF_DATA_COMMON __llvm_prf_data
+#define INSTR_PROF_NAME_COMMON __llvm_prf_names
+#define INSTR_PROF_CNTS_COMMON __llvm_prf_cnts
+#define INSTR_PROF_VALS_COMMON __llvm_prf_vals
+#define INSTR_PROF_VNODES_COMMON __llvm_prf_vnds
+#define INSTR_PROF_COVMAP_COMMON __llvm_covmap
+/* Win32 */
+#define INSTR_PROF_DATA_COFF .lprfd
+#define INSTR_PROF_NAME_COFF .lprfn
+#define INSTR_PROF_CNTS_COFF .lprfc
+#define INSTR_PROF_VALS_COFF .lprfv
+#define INSTR_PROF_VNODES_COFF .lprfnd
+#define INSTR_PROF_COVMAP_COFF .lcovmap
+
+#ifdef _WIN32
 /* Runtime section names and name strings.  */
-#define INSTR_PROF_DATA_SECT_NAME __llvm_prf_data
-#define INSTR_PROF_NAME_SECT_NAME __llvm_prf_names
-#define INSTR_PROF_CNTS_SECT_NAME __llvm_prf_cnts
+#define INSTR_PROF_DATA_SECT_NAME INSTR_PROF_DATA_COFF
+#define INSTR_PROF_NAME_SECT_NAME INSTR_PROF_NAME_COFF
+#define INSTR_PROF_CNTS_SECT_NAME INSTR_PROF_CNTS_COFF
 /* Array of pointers. Each pointer points to a list
  * of value nodes associated with one value site.
  */
-#define INSTR_PROF_VALS_SECT_NAME __llvm_prf_vals
+#define INSTR_PROF_VALS_SECT_NAME INSTR_PROF_VALS_COFF
 /* Value profile nodes section. */
-#define INSTR_PROF_VNODES_SECT_NAME __llvm_prf_vnds
-#define INSTR_PROF_COVMAP_SECT_NAME __llvm_covmap
+#define INSTR_PROF_VNODES_SECT_NAME INSTR_PROF_VNODES_COFF
+#define INSTR_PROF_COVMAP_SECT_NAME INSTR_PROF_COVMAP_COFF
+#else
+/* Runtime section names and name strings.  */
+#define INSTR_PROF_DATA_SECT_NAME INSTR_PROF_DATA_COMMON
+#define INSTR_PROF_NAME_SECT_NAME INSTR_PROF_NAME_COMMON
+#define INSTR_PROF_CNTS_SECT_NAME INSTR_PROF_CNTS_COMMON
+/* Array of pointers. Each pointer points to a list
+ * of value nodes associated with one value site.
+ */
+#define INSTR_PROF_VALS_SECT_NAME INSTR_PROF_VALS_COMMON
+/* Value profile nodes section. */
+#define INSTR_PROF_VNODES_SECT_NAME INSTR_PROF_VNODES_COMMON
+#define INSTR_PROF_COVMAP_SECT_NAME INSTR_PROF_COVMAP_COMMON
+#endif
 
 #define INSTR_PROF_DATA_SECT_NAME_STR                                          \
   INSTR_PROF_QUOTE(INSTR_PROF_DATA_SECT_NAME)
@@ -649,6 +716,9 @@
 #define INSTR_PROF_VALUE_PROF_FUNC __llvm_profile_instrument_target
 #define INSTR_PROF_VALUE_PROF_FUNC_STR \
         INSTR_PROF_QUOTE(INSTR_PROF_VALUE_PROF_FUNC)
+#define INSTR_PROF_VALUE_RANGE_PROF_FUNC __llvm_profile_instrument_range
+#define INSTR_PROF_VALUE_RANGE_PROF_FUNC_STR \
+        INSTR_PROF_QUOTE(INSTR_PROF_VALUE_RANGE_PROF_FUNC)
 
 /* InstrProfile per-function control data alignment.  */
 #define INSTR_PROF_DATA_ALIGNMENT 8
diff --git a/lib/profile/InstrProfilingBuffer.c b/lib/profile/InstrProfilingBuffer.c
index ac259e8..a7e852f 100644
--- a/lib/profile/InstrProfilingBuffer.c
+++ b/lib/profile/InstrProfilingBuffer.c
@@ -45,15 +45,24 @@
          (CountersEnd - CountersBegin) * sizeof(uint64_t) + NamesSize + Padding;
 }
 
+COMPILER_RT_VISIBILITY
+void initBufferWriter(ProfDataWriter *BufferWriter, char *Buffer) {
+  BufferWriter->Write = lprofBufferWriter;
+  BufferWriter->WriterCtx = Buffer;
+}
+
 COMPILER_RT_VISIBILITY int __llvm_profile_write_buffer(char *Buffer) {
-  return lprofWriteData(lprofBufferWriter, Buffer, 0);
+  ProfDataWriter BufferWriter;
+  initBufferWriter(&BufferWriter, Buffer);
+  return lprofWriteData(&BufferWriter, 0, 0);
 }
 
 COMPILER_RT_VISIBILITY int __llvm_profile_write_buffer_internal(
     char *Buffer, const __llvm_profile_data *DataBegin,
     const __llvm_profile_data *DataEnd, const uint64_t *CountersBegin,
     const uint64_t *CountersEnd, const char *NamesBegin, const char *NamesEnd) {
-  return lprofWriteDataImpl(lprofBufferWriter, Buffer, DataBegin, DataEnd,
-                            CountersBegin, CountersEnd, 0, NamesBegin,
-                            NamesEnd);
+  ProfDataWriter BufferWriter;
+  initBufferWriter(&BufferWriter, Buffer);
+  return lprofWriteDataImpl(&BufferWriter, DataBegin, DataEnd, CountersBegin,
+                            CountersEnd, 0, NamesBegin, NamesEnd, 0);
 }
diff --git a/lib/profile/InstrProfilingFile.c b/lib/profile/InstrProfilingFile.c
index ba717ee..553baad 100644
--- a/lib/profile/InstrProfilingFile.c
+++ b/lib/profile/InstrProfilingFile.c
@@ -95,24 +95,39 @@
 static unsigned doMerging() { return lprofCurFilename.MergePoolSize; }
 
 /* Return 1 if there is an error, otherwise return  0.  */
-static uint32_t fileWriter(ProfDataIOVec *IOVecs, uint32_t NumIOVecs,
-                           void **WriterCtx) {
+static uint32_t fileWriter(ProfDataWriter *This, ProfDataIOVec *IOVecs,
+                           uint32_t NumIOVecs) {
   uint32_t I;
-  FILE *File = (FILE *)*WriterCtx;
+  FILE *File = (FILE *)This->WriterCtx;
   for (I = 0; I < NumIOVecs; I++) {
-    if (fwrite(IOVecs[I].Data, IOVecs[I].ElmSize, IOVecs[I].NumElm, File) !=
-        IOVecs[I].NumElm)
-      return 1;
+    if (IOVecs[I].Data) {
+      if (fwrite(IOVecs[I].Data, IOVecs[I].ElmSize, IOVecs[I].NumElm, File) !=
+          IOVecs[I].NumElm)
+        return 1;
+    } else {
+      if (fseek(File, IOVecs[I].ElmSize * IOVecs[I].NumElm, SEEK_CUR) == -1)
+        return 1;
+    }
   }
   return 0;
 }
 
+static void initFileWriter(ProfDataWriter *This, FILE *File) {
+  This->Write = fileWriter;
+  This->WriterCtx = File;
+}
+
 COMPILER_RT_VISIBILITY ProfBufferIO *
 lprofCreateBufferIOInternal(void *File, uint32_t BufferSz) {
   FreeHook = &free;
   DynamicBufferIOBuffer = (uint8_t *)calloc(BufferSz, 1);
   VPBufferSize = BufferSz;
-  return lprofCreateBufferIO(fileWriter, File);
+  ProfDataWriter *fileWriter =
+      (ProfDataWriter *)calloc(sizeof(ProfDataWriter), 1);
+  initFileWriter(fileWriter, File);
+  ProfBufferIO *IO = lprofCreateBufferIO(fileWriter);
+  IO->OwnFileWriter = 1;
+  return IO;
 }
 
 static void setupIOBuffer() {
@@ -126,9 +141,10 @@
 
 /* Read profile data in \c ProfileFile and merge with in-memory
    profile counters. Returns -1 if there is fatal error, otheriwse
-   0 is returned.
+   0 is returned. Returning 0 does not mean merge is actually
+   performed. If merge is actually done, *MergeDone is set to 1.
 */
-static int doProfileMerging(FILE *ProfileFile) {
+static int doProfileMerging(FILE *ProfileFile, int *MergeDone) {
   uint64_t ProfileFileSize;
   char *ProfileBuffer;
 
@@ -173,6 +189,8 @@
   __llvm_profile_merge_from_buffer(ProfileBuffer, ProfileFileSize);
   (void)munmap(ProfileBuffer, ProfileFileSize);
 
+  *MergeDone = 1;
+
   return 0;
 }
 
@@ -194,7 +212,7 @@
  * dumper. With profile merging enabled, each executable as well as any of
  * its instrumented shared libraries dump profile data into their own data file.
 */
-static FILE *openFileForMerging(const char *ProfileFileName) {
+static FILE *openFileForMerging(const char *ProfileFileName, int *MergeDone) {
   FILE *ProfileFile;
   int rc;
 
@@ -203,15 +221,14 @@
   if (!ProfileFile)
     return NULL;
 
-  rc = doProfileMerging(ProfileFile);
-  if (rc || COMPILER_RT_FTRUNCATE(ProfileFile, 0L) ||
+  rc = doProfileMerging(ProfileFile, MergeDone);
+  if (rc || (!*MergeDone && COMPILER_RT_FTRUNCATE(ProfileFile, 0L)) ||
       fseek(ProfileFile, 0L, SEEK_SET) == -1) {
     PROF_ERR("Profile Merging of file %s failed: %s\n", ProfileFileName,
              strerror(errno));
     fclose(ProfileFile);
     return NULL;
   }
-  fseek(ProfileFile, 0L, SEEK_SET);
   return ProfileFile;
 }
 
@@ -220,17 +237,20 @@
   int RetVal;
   FILE *OutputFile;
 
+  int MergeDone = 0;
   if (!doMerging())
     OutputFile = fopen(OutputName, "ab");
   else
-    OutputFile = openFileForMerging(OutputName);
+    OutputFile = openFileForMerging(OutputName, &MergeDone);
 
   if (!OutputFile)
     return -1;
 
   FreeHook = &free;
   setupIOBuffer();
-  RetVal = lprofWriteData(fileWriter, OutputFile, lprofGetVPDataReader());
+  ProfDataWriter fileWriter;
+  initFileWriter(&fileWriter, OutputFile);
+  RetVal = lprofWriteData(&fileWriter, lprofGetVPDataReader(), MergeDone);
 
   fclose(OutputFile);
   return RetVal;
diff --git a/lib/profile/InstrProfilingInternal.h b/lib/profile/InstrProfilingInternal.h
index c73b291..36490ef 100644
--- a/lib/profile/InstrProfilingInternal.h
+++ b/lib/profile/InstrProfilingInternal.h
@@ -48,17 +48,21 @@
   size_t NumElm;
 } ProfDataIOVec;
 
-typedef uint32_t (*WriterCallback)(ProfDataIOVec *, uint32_t NumIOVecs,
-                                   void **WriterCtx);
+struct ProfDataWriter;
+typedef uint32_t (*WriterCallback)(struct ProfDataWriter *This, ProfDataIOVec *,
+                                   uint32_t NumIOVecs);
+
+typedef struct ProfDataWriter {
+  WriterCallback Write;
+  void *WriterCtx;
+} ProfDataWriter;
 
 /*!
  * The data structure for buffered IO of profile data.
  */
 typedef struct ProfBufferIO {
-  /* File handle.  */
-  void *File;
-  /* Low level IO callback. */
-  WriterCallback FileWriter;
+  ProfDataWriter *FileWriter;
+  uint32_t OwnFileWriter;
   /* The start of the buffer. */
   uint8_t *BufferStart;
   /* Total size of the buffer. */
@@ -73,7 +77,7 @@
 /*!
  * This is the interface to create a handle for buffered IO.
  */
-ProfBufferIO *lprofCreateBufferIO(WriterCallback FileWriter, void *File);
+ProfBufferIO *lprofCreateBufferIO(ProfDataWriter *FileWriter);
 
 /*!
  * The interface to destroy the bufferIO handle and reclaim
@@ -96,8 +100,9 @@
 /* The low level interface to write data into a buffer. It is used as the
  * callback by other high level writer methods such as buffered IO writer
  * and profile data writer.  */
-uint32_t lprofBufferWriter(ProfDataIOVec *IOVecs, uint32_t NumIOVecs,
-                           void **WriterCtx);
+uint32_t lprofBufferWriter(ProfDataWriter *This, ProfDataIOVec *IOVecs,
+                           uint32_t NumIOVecs);
+void initBufferWriter(ProfDataWriter *BufferWriter, char *Buffer);
 
 struct ValueProfData;
 struct ValueProfRecord;
@@ -133,15 +138,17 @@
                                         uint32_t N);
 } VPDataReaderType;
 
-int lprofWriteData(WriterCallback Writer, void *WriterCtx,
-                   VPDataReaderType *VPDataReader);
-int lprofWriteDataImpl(WriterCallback Writer, void *WriterCtx,
+/* Write profile data to destinitation. If SkipNameDataWrite is set to 1,
+   the name data is already in destintation, we just skip over it. */
+int lprofWriteData(ProfDataWriter *Writer, VPDataReaderType *VPDataReader,
+                   int SkipNameDataWrite);
+int lprofWriteDataImpl(ProfDataWriter *Writer,
                        const __llvm_profile_data *DataBegin,
                        const __llvm_profile_data *DataEnd,
                        const uint64_t *CountersBegin,
                        const uint64_t *CountersEnd,
                        VPDataReaderType *VPDataReader, const char *NamesBegin,
-                       const char *NamesEnd);
+                       const char *NamesEnd, int SkipNameDataWrite);
 
 /* Merge value profile data pointed to by SrcValueProfData into
  * in-memory profile counters pointed by to DstData.  */
diff --git a/lib/profile/InstrProfilingUtil.c b/lib/profile/InstrProfilingUtil.c
index 9b96309..b8c1269 100644
--- a/lib/profile/InstrProfilingUtil.c
+++ b/lib/profile/InstrProfilingUtil.c
@@ -226,27 +226,6 @@
   return Sep;
 }
 
-COMPILER_RT_VISIBILITY int lprofSuspendSigKill() {
-#if defined(__linux__)
-  int PDeachSig = 0;
-  /* Temporarily suspend getting SIGKILL upon exit of the parent process. */
-  if (prctl(PR_GET_PDEATHSIG, &PDeachSig) == 0 && PDeachSig == SIGKILL) {
-    fprintf(stderr, "set\n");
-    prctl(PR_SET_PDEATHSIG, 0);
-  }
-  return (PDeachSig == SIGKILL);
-#else
-  return 0;
-#endif
-}
-
-COMPILER_RT_VISIBILITY void lprofRestoreSigKill() {
-#if defined(__linux__)
-  fprintf(stderr, "restore \n");
-  prctl(PR_SET_PDEATHSIG, SIGKILL);
-#endif
-}
-
 COMPILER_RT_VISIBILITY void lprofInstallSignalHandler(int sig,
                                                       void (*handler)(int)) {
 #ifdef _WIN32
@@ -264,3 +243,21 @@
               sig, err);
 #endif
 }
+
+COMPILER_RT_VISIBILITY int lprofSuspendSigKill() {
+#if defined(__linux__)
+  int PDeachSig = 0;
+  /* Temporarily suspend getting SIGKILL upon exit of the parent process. */
+  if (prctl(PR_GET_PDEATHSIG, &PDeachSig) == 0 && PDeachSig == SIGKILL)
+    prctl(PR_SET_PDEATHSIG, 0);
+  return (PDeachSig == SIGKILL);
+#else
+  return 0;
+#endif
+}
+
+COMPILER_RT_VISIBILITY void lprofRestoreSigKill() {
+#if defined(__linux__)
+  prctl(PR_SET_PDEATHSIG, SIGKILL);
+#endif
+}
diff --git a/lib/profile/InstrProfilingUtil.h b/lib/profile/InstrProfilingUtil.h
index f4b5b7d..61e3020 100644
--- a/lib/profile/InstrProfilingUtil.h
+++ b/lib/profile/InstrProfilingUtil.h
@@ -51,6 +51,8 @@
 unsigned lprofBoolCmpXchg(void **Ptr, void *OldV, void *NewV);
 void *lprofPtrFetchAdd(void **Mem, long ByteIncr);
 
+void lprofInstallSignalHandler(int sig, void(*handler)(int));
+
 /* Temporarily suspend SIGKILL. Return value of 1 means a restore is needed.
  * Other return values mean no restore is needed.
  */
@@ -59,6 +61,4 @@
 /* Restore previously suspended SIGKILL. */
 void lprofRestoreSigKill();
 
-void lprofInstallSignalHandler(int sig, void(*handler)(int));
-
 #endif /* PROFILE_INSTRPROFILINGUTIL_H */
diff --git a/lib/profile/InstrProfilingValue.c b/lib/profile/InstrProfilingValue.c
index 6648f89..44263da 100644
--- a/lib/profile/InstrProfilingValue.c
+++ b/lib/profile/InstrProfilingValue.c
@@ -220,6 +220,35 @@
 }
 
 /*
+ * The target values are partitioned into multiple regions/ranges. There is one
+ * contiguous region which is precise -- every value in the range is tracked
+ * individually. A value outside the precise region will be collapsed into one
+ * value depending on the region it falls in.
+ *
+ * There are three regions:
+ * 1. (-inf, PreciseRangeStart) and (PreciseRangeLast, LargeRangeValue) belong
+ * to one region -- all values here should be mapped to one value of
+ * "PreciseRangeLast + 1".
+ * 2. [PreciseRangeStart, PreciseRangeLast]
+ * 3. Large values: [LargeValue, +inf) maps to one value of LargeValue.
+ *
+ * The range for large values is optional. The default value of INT64_MIN
+ * indicates it is not specified.
+ */
+COMPILER_RT_VISIBILITY void __llvm_profile_instrument_range(
+    uint64_t TargetValue, void *Data, uint32_t CounterIndex,
+    int64_t PreciseRangeStart, int64_t PreciseRangeLast, int64_t LargeValue) {
+
+  if (LargeValue != INT64_MIN && (int64_t)TargetValue >= LargeValue)
+    TargetValue = LargeValue;
+  else if ((int64_t)TargetValue < PreciseRangeStart ||
+           (int64_t)TargetValue > PreciseRangeLast)
+    TargetValue = PreciseRangeLast + 1;
+
+  __llvm_profile_instrument_target(TargetValue, Data, CounterIndex);
+}
+
+/*
  * A wrapper struct that represents value profile runtime data.
  * Like InstrProfRecord class which is used by profiling host tools,
  * ValueProfRuntimeRecord also implements the abstract intefaces defined in
diff --git a/lib/profile/InstrProfilingWriter.c b/lib/profile/InstrProfilingWriter.c
index 95f37e8..d4c9b9b 100644
--- a/lib/profile/InstrProfilingWriter.c
+++ b/lib/profile/InstrProfilingWriter.c
@@ -31,41 +31,44 @@
 /* The buffer writer is reponsponsible in keeping writer state
  * across the call.
  */
-COMPILER_RT_VISIBILITY uint32_t lprofBufferWriter(ProfDataIOVec *IOVecs,
-                                                  uint32_t NumIOVecs,
-                                                  void **WriterCtx) {
+COMPILER_RT_VISIBILITY uint32_t lprofBufferWriter(ProfDataWriter *This,
+                                                  ProfDataIOVec *IOVecs,
+                                                  uint32_t NumIOVecs) {
   uint32_t I;
-  char **Buffer = (char **)WriterCtx;
+  char **Buffer = (char **)&This->WriterCtx;
   for (I = 0; I < NumIOVecs; I++) {
     size_t Length = IOVecs[I].ElmSize * IOVecs[I].NumElm;
-    memcpy(*Buffer, IOVecs[I].Data, Length);
+    if (IOVecs[I].Data)
+      memcpy(*Buffer, IOVecs[I].Data, Length);
     *Buffer += Length;
   }
   return 0;
 }
 
-static void llvmInitBufferIO(ProfBufferIO *BufferIO, WriterCallback FileWriter,
-                             void *File, uint8_t *Buffer, uint32_t BufferSz) {
-  BufferIO->File = File;
+static void llvmInitBufferIO(ProfBufferIO *BufferIO, ProfDataWriter *FileWriter,
+                             uint8_t *Buffer, uint32_t BufferSz) {
   BufferIO->FileWriter = FileWriter;
+  BufferIO->OwnFileWriter = 0;
   BufferIO->BufferStart = Buffer;
   BufferIO->BufferSz = BufferSz;
   BufferIO->CurOffset = 0;
 }
 
 COMPILER_RT_VISIBILITY ProfBufferIO *
-lprofCreateBufferIO(WriterCallback FileWriter, void *File) {
+lprofCreateBufferIO(ProfDataWriter *FileWriter) {
   uint8_t *Buffer = DynamicBufferIOBuffer;
   uint32_t BufferSize = VPBufferSize;
   if (!Buffer) {
     Buffer = &BufferIOBuffer[0];
     BufferSize = sizeof(BufferIOBuffer);
   }
-  llvmInitBufferIO(&TheBufferIO, FileWriter, File, Buffer, BufferSize);
+  llvmInitBufferIO(&TheBufferIO, FileWriter, Buffer, BufferSize);
   return &TheBufferIO;
 }
 
 COMPILER_RT_VISIBILITY void lprofDeleteBufferIO(ProfBufferIO *BufferIO) {
+  if (BufferIO->OwnFileWriter)
+    FreeHook(BufferIO->FileWriter);
   if (DynamicBufferIOBuffer) {
     FreeHook(DynamicBufferIOBuffer);
     DynamicBufferIOBuffer = 0;
@@ -83,13 +86,16 @@
   /* Special case, bypass the buffer completely. */
   ProfDataIOVec IO[] = {{Data, sizeof(uint8_t), Size}};
   if (Size > BufferIO->BufferSz) {
-    if (BufferIO->FileWriter(IO, 1, &BufferIO->File))
+    if (BufferIO->FileWriter->Write(BufferIO->FileWriter, IO, 1))
       return -1;
   } else {
     /* Write the data to buffer */
     uint8_t *Buffer = BufferIO->BufferStart + BufferIO->CurOffset;
-    lprofBufferWriter(IO, 1, (void **)&Buffer);
-    BufferIO->CurOffset = Buffer - BufferIO->BufferStart;
+    ProfDataWriter BufferWriter;
+    initBufferWriter(&BufferWriter, (char *)Buffer);
+    lprofBufferWriter(&BufferWriter, IO, 1);
+    BufferIO->CurOffset =
+        (uint8_t *)BufferWriter.WriterCtx - BufferIO->BufferStart;
   }
   return 0;
 }
@@ -98,7 +104,7 @@
   if (BufferIO->CurOffset) {
     ProfDataIOVec IO[] = {
         {BufferIO->BufferStart, sizeof(uint8_t), BufferIO->CurOffset}};
-    if (BufferIO->FileWriter(IO, 1, &BufferIO->File))
+    if (BufferIO->FileWriter->Write(BufferIO->FileWriter, IO, 1))
       return -1;
     BufferIO->CurOffset = 0;
   }
@@ -201,7 +207,7 @@
   return 0;
 }
 
-static int writeValueProfData(WriterCallback Writer, void *WriterCtx,
+static int writeValueProfData(ProfDataWriter *Writer,
                               VPDataReaderType *VPDataReader,
                               const __llvm_profile_data *DataBegin,
                               const __llvm_profile_data *DataEnd) {
@@ -211,7 +217,7 @@
   if (!VPDataReader)
     return 0;
 
-  BufferIO = lprofCreateBufferIO(Writer, WriterCtx);
+  BufferIO = lprofCreateBufferIO(Writer);
 
   for (DI = DataBegin; DI < DataEnd; DI++) {
     if (writeOneValueProfData(BufferIO, VPDataReader, DI))
@@ -225,9 +231,9 @@
   return 0;
 }
 
-COMPILER_RT_VISIBILITY int lprofWriteData(WriterCallback Writer,
-                                          void *WriterCtx,
-                                          VPDataReaderType *VPDataReader) {
+COMPILER_RT_VISIBILITY int lprofWriteData(ProfDataWriter *Writer,
+                                          VPDataReaderType *VPDataReader,
+                                          int SkipNameDataWrite) {
   /* Match logic in __llvm_profile_write_buffer(). */
   const __llvm_profile_data *DataBegin = __llvm_profile_begin_data();
   const __llvm_profile_data *DataEnd = __llvm_profile_end_data();
@@ -235,18 +241,17 @@
   const uint64_t *CountersEnd = __llvm_profile_end_counters();
   const char *NamesBegin = __llvm_profile_begin_names();
   const char *NamesEnd = __llvm_profile_end_names();
-  return lprofWriteDataImpl(Writer, WriterCtx, DataBegin, DataEnd,
-                            CountersBegin, CountersEnd, VPDataReader,
-                            NamesBegin, NamesEnd);
+  return lprofWriteDataImpl(Writer, DataBegin, DataEnd, CountersBegin,
+                            CountersEnd, VPDataReader, NamesBegin, NamesEnd,
+                            SkipNameDataWrite);
 }
 
 COMPILER_RT_VISIBILITY int
-lprofWriteDataImpl(WriterCallback Writer, void *WriterCtx,
-                   const __llvm_profile_data *DataBegin,
+lprofWriteDataImpl(ProfDataWriter *Writer, const __llvm_profile_data *DataBegin,
                    const __llvm_profile_data *DataEnd,
                    const uint64_t *CountersBegin, const uint64_t *CountersEnd,
                    VPDataReaderType *VPDataReader, const char *NamesBegin,
-                   const char *NamesEnd) {
+                   const char *NamesEnd, int SkipNameDataWrite) {
 
   /* Calculate size of sections. */
   const uint64_t DataSize = __llvm_profile_get_data_size(DataBegin, DataEnd);
@@ -268,14 +273,14 @@
 #include "InstrProfData.inc"
 
   /* Write the data. */
-  ProfDataIOVec IOVec[] = {{&Header, sizeof(__llvm_profile_header), 1},
-                           {DataBegin, sizeof(__llvm_profile_data), DataSize},
-                           {CountersBegin, sizeof(uint64_t), CountersSize},
-                           {NamesBegin, sizeof(uint8_t), NamesSize},
-                           {Zeroes, sizeof(uint8_t), Padding}};
-  if (Writer(IOVec, sizeof(IOVec) / sizeof(*IOVec), &WriterCtx))
+  ProfDataIOVec IOVec[] = {
+      {&Header, sizeof(__llvm_profile_header), 1},
+      {DataBegin, sizeof(__llvm_profile_data), DataSize},
+      {CountersBegin, sizeof(uint64_t), CountersSize},
+      {SkipNameDataWrite ? NULL : NamesBegin, sizeof(uint8_t), NamesSize},
+      {Zeroes, sizeof(uint8_t), Padding}};
+  if (Writer->Write(Writer, IOVec, sizeof(IOVec) / sizeof(*IOVec)))
     return -1;
 
-  return writeValueProfData(Writer, WriterCtx, VPDataReader, DataBegin,
-                            DataEnd);
+  return writeValueProfData(Writer, VPDataReader, DataBegin, DataEnd);
 }
diff --git a/lib/sanitizer_common/CMakeLists.txt b/lib/sanitizer_common/CMakeLists.txt
index c70b8be..a17bd12 100644
--- a/lib/sanitizer_common/CMakeLists.txt
+++ b/lib/sanitizer_common/CMakeLists.txt
@@ -6,6 +6,7 @@
   sanitizer_common.cc
   sanitizer_deadlock_detector1.cc
   sanitizer_deadlock_detector2.cc
+  sanitizer_errno.cc
   sanitizer_flags.cc
   sanitizer_flag_parser.cc
   sanitizer_libc.cc
@@ -25,6 +26,7 @@
   sanitizer_stackdepot.cc
   sanitizer_stacktrace.cc
   sanitizer_stacktrace_printer.cc
+  sanitizer_stoptheworld_mac.cc
   sanitizer_suppressions.cc
   sanitizer_symbolizer.cc
   sanitizer_symbolizer_libbacktrace.cc
@@ -53,10 +55,10 @@
 set(SANITIZER_LIBCDEP_SOURCES
   sanitizer_common_libcdep.cc
   sancov_flags.cc
-  sanitizer_coverage_libcdep.cc
   sanitizer_coverage_libcdep_new.cc
-  sanitizer_coverage_mapping_libcdep.cc
+  sanitizer_coverage_win_sections.cc
   sanitizer_linux_libcdep.cc
+  sanitizer_mac_libcdep.cc
   sanitizer_posix_libcdep.cc
   sanitizer_stacktrace_libcdep.cc
   sanitizer_stoptheworld_linux_libcdep.cc
@@ -92,6 +94,8 @@
   sanitizer_common_syscalls.inc
   sanitizer_deadlock_detector.h
   sanitizer_deadlock_detector_interface.h
+  sanitizer_errno.h
+  sanitizer_errno_codes.h
   sanitizer_flag_parser.h
   sanitizer_flags.h
   sanitizer_flags.inc
@@ -126,7 +130,10 @@
   sanitizer_syscall_generic.inc
   sanitizer_syscall_linux_x86_64.inc
   sanitizer_syscall_linux_aarch64.inc
-  sanitizer_thread_registry.h)
+  sanitizer_thread_registry.h
+  sanitizer_win.h)
+
+include_directories(..)
 
 set(SANITIZER_COMMON_DEFINITIONS)
 
@@ -184,6 +191,55 @@
   CFLAGS ${SANITIZER_CFLAGS}
   DEFS ${SANITIZER_COMMON_DEFINITIONS})
 
+if(WIN32)
+  add_compiler_rt_object_libraries(SanitizerCommonWeakInterception
+    ${SANITIZER_COMMON_SUPPORTED_OS}
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
+    SOURCES sanitizer_win_weak_interception.cc
+    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(SancovWeakInterception
+    ${SANITIZER_COMMON_SUPPORTED_OS}
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
+    SOURCES sanitizer_coverage_win_weak_interception.cc
+    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})
+
+  add_compiler_rt_object_libraries(SanitizerCommonDllThunk
+    ${SANITIZER_COMMON_SUPPORTED_OS}
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
+    SOURCES sanitizer_win_dll_thunk.cc
+    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(SancovDllThunk
+    ${SANITIZER_COMMON_SUPPORTED_OS}
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
+    SOURCES sanitizer_coverage_win_dll_thunk.cc
+            sanitizer_coverage_win_sections.cc
+    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})
+
+  set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK")
+  if(MSVC)
+    list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl")
+  elseif(CMAKE_C_COMPILER_ID MATCHES Clang)
+    list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs")
+  endif()
+  add_compiler_rt_object_libraries(SanitizerCommonDynamicRuntimeThunk
+    ${SANITIZER_COMMON_SUPPORTED_OS}
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
+    SOURCES sanitizer_win_dynamic_runtime_thunk.cc
+    CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(SancovDynamicRuntimeThunk
+    ${SANITIZER_COMMON_SUPPORTED_OS}
+    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
+    SOURCES sanitizer_coverage_win_dynamic_runtime_thunk.cc
+            sanitizer_coverage_win_sections.cc
+    CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
+    DEFS ${SANITIZER_COMMON_DEFINITIONS})
+endif()
+
 # Unit tests for common sanitizer runtime.
 if(COMPILER_RT_INCLUDE_TESTS)
   add_subdirectory(tests)
diff --git a/lib/sanitizer_common/sancov_flags.cc b/lib/sanitizer_common/sancov_flags.cc
index 08fd2a4..9abb5b5 100644
--- a/lib/sanitizer_common/sancov_flags.cc
+++ b/lib/sanitizer_common/sancov_flags.cc
@@ -15,10 +15,9 @@
 #include "sanitizer_flag_parser.h"
 #include "sanitizer_platform.h"
 
-#if !SANITIZER_LINUX
-// other platforms do not have weak symbols out of the box.
-extern "C" const char* __sancov_default_options() { return ""; }
-#endif
+SANITIZER_INTERFACE_WEAK_DEF(const char*, __sancov_default_options, void) {
+  return "";
+}
 
 using namespace __sanitizer;
 
diff --git a/lib/sanitizer_common/sancov_flags.h b/lib/sanitizer_common/sancov_flags.h
index 5fbd7ad..627d9a3 100644
--- a/lib/sanitizer_common/sancov_flags.h
+++ b/lib/sanitizer_common/sancov_flags.h
@@ -32,9 +32,9 @@
 
 void InitializeSancovFlags();
 
+}  // namespace __sancov
+
 extern "C" SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE const char*
 __sancov_default_options();
 
-}  // namespace __sancov
-
 #endif
diff --git a/lib/sanitizer_common/sanitizer_allocator.cc b/lib/sanitizer_common/sanitizer_allocator.cc
index d47b5b4..84f523c 100644
--- a/lib/sanitizer_common/sanitizer_allocator.cc
+++ b/lib/sanitizer_common/sanitizer_allocator.cc
@@ -14,6 +14,7 @@
 
 #include "sanitizer_allocator.h"
 
+#include "sanitizer_allocator_checks.h"
 #include "sanitizer_allocator_internal.h"
 #include "sanitizer_atomic.h"
 #include "sanitizer_common.h"
@@ -94,8 +95,7 @@
     SpinMutexLock l(&internal_alloc_init_mu);
     if (atomic_load(&internal_allocator_initialized, memory_order_relaxed) ==
         0) {
-      internal_allocator_instance->Init(
-          /* may_return_null */ false, kReleaseToOSIntervalNever);
+      internal_allocator_instance->Init(kReleaseToOSIntervalNever);
       atomic_store(&internal_allocator_initialized, 1, memory_order_release);
     }
   }
@@ -108,9 +108,9 @@
   if (cache == 0) {
     SpinMutexLock l(&internal_allocator_cache_mu);
     return internal_allocator()->Allocate(&internal_allocator_cache, size,
-                                          alignment, false);
+                                          alignment);
   }
-  return internal_allocator()->Allocate(cache, size, alignment, false);
+  return internal_allocator()->Allocate(cache, size, alignment);
 }
 
 static void *RawInternalRealloc(void *ptr, uptr size,
@@ -161,8 +161,8 @@
 }
 
 void *InternalCalloc(uptr count, uptr size, InternalAllocatorCache *cache) {
-  if (CallocShouldReturnNullDueToOverflow(count, size))
-    return internal_allocator()->ReturnNullOrDieOnBadRequest();
+  if (UNLIKELY(CheckForCallocOverflow(count, size)))
+    return InternalAllocator::FailureHandler::OnBadRequest();
   void *p = InternalAlloc(count * size, cache);
   if (p) internal_memset(p, 0, count * size);
   return p;
@@ -203,18 +203,15 @@
   low_level_alloc_callback = callback;
 }
 
-bool CallocShouldReturnNullDueToOverflow(uptr size, uptr n) {
-  if (!size) return false;
-  uptr max = (uptr)-1L;
-  return (max / size) < n;
+static atomic_uint8_t allocator_out_of_memory = {0};
+static atomic_uint8_t allocator_may_return_null = {0};
+
+bool IsAllocatorOutOfMemory() {
+  return atomic_load_relaxed(&allocator_out_of_memory);
 }
 
-static atomic_uint8_t reporting_out_of_memory = {0};
-
-bool IsReportingOOM() { return atomic_load_relaxed(&reporting_out_of_memory); }
-
-void NORETURN ReportAllocatorCannotReturnNull(bool out_of_memory) {
-  if (out_of_memory) atomic_store_relaxed(&reporting_out_of_memory, 1);
+// Prints error message and kills the program.
+void NORETURN ReportAllocatorCannotReturnNull() {
   Report("%s's allocator is terminating the process instead of returning 0\n",
          SanitizerToolName);
   Report("If you don't like this behavior set allocator_may_return_null=1\n");
@@ -222,4 +219,35 @@
   Die();
 }
 
+bool AllocatorMayReturnNull() {
+  return atomic_load(&allocator_may_return_null, memory_order_relaxed);
+}
+
+void SetAllocatorMayReturnNull(bool may_return_null) {
+  atomic_store(&allocator_may_return_null, may_return_null,
+               memory_order_relaxed);
+}
+
+void *ReturnNullOrDieOnFailure::OnBadRequest() {
+  if (AllocatorMayReturnNull())
+    return nullptr;
+  ReportAllocatorCannotReturnNull();
+}
+
+void *ReturnNullOrDieOnFailure::OnOOM() {
+  atomic_store_relaxed(&allocator_out_of_memory, 1);
+  if (AllocatorMayReturnNull())
+    return nullptr;
+  ReportAllocatorCannotReturnNull();
+}
+
+void NORETURN *DieOnFailure::OnBadRequest() {
+  ReportAllocatorCannotReturnNull();
+}
+
+void NORETURN *DieOnFailure::OnOOM() {
+  atomic_store_relaxed(&allocator_out_of_memory, 1);
+  ReportAllocatorCannotReturnNull();
+}
+
 } // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_allocator.h b/lib/sanitizer_common/sanitizer_allocator.h
index 9a37a2f..8c5696e 100644
--- a/lib/sanitizer_common/sanitizer_allocator.h
+++ b/lib/sanitizer_common/sanitizer_allocator.h
@@ -24,12 +24,28 @@
 
 namespace __sanitizer {
 
-// Returns true if ReportAllocatorCannotReturnNull(true) was called.
-// Can be use to avoid memory hungry operations.
-bool IsReportingOOM();
+// Since flags are immutable and allocator behavior can be changed at runtime
+// (unit tests or ASan on Android are some examples), allocator_may_return_null
+// flag value is cached here and can be altered later.
+bool AllocatorMayReturnNull();
+void SetAllocatorMayReturnNull(bool may_return_null);
 
-// Prints error message and kills the program.
-void NORETURN ReportAllocatorCannotReturnNull(bool out_of_memory);
+// Allocator failure handling policies:
+// Implements AllocatorMayReturnNull policy, returns null when the flag is set,
+// dies otherwise.
+struct ReturnNullOrDieOnFailure {
+  static void *OnBadRequest();
+  static void *OnOOM();
+};
+// Always dies on the failure.
+struct DieOnFailure {
+  static void NORETURN *OnBadRequest();
+  static void NORETURN *OnOOM();
+};
+
+// Returns true if allocator detected OOM condition. Can be used to avoid memory
+// hungry operations. Set when AllocatorReturnNullOrDieOnOOM() is called.
+bool IsAllocatorOutOfMemory();
 
 // Allocators call these callbacks on mmap/munmap.
 struct NoOpMapUnmapCallback {
@@ -40,9 +56,6 @@
 // Callback type for iterating over chunks.
 typedef void (*ForEachChunkCallback)(uptr chunk, void *arg);
 
-// Returns true if calloc(size, n) should return 0 due to overflow in size*n.
-bool CallocShouldReturnNullDueToOverflow(uptr size, uptr n);
-
 #include "sanitizer_allocator_size_class_map.h"
 #include "sanitizer_allocator_stats.h"
 #include "sanitizer_allocator_primary64.h"
diff --git a/lib/sanitizer_common/sanitizer_allocator_checks.h b/lib/sanitizer_common/sanitizer_allocator_checks.h
new file mode 100644
index 0000000..202916e
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_allocator_checks.h
@@ -0,0 +1,64 @@
+//===-- sanitizer_allocator_checks.h ----------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Various checks shared between ThreadSanitizer, MemorySanitizer, etc. memory
+// allocators.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SANITIZER_ALLOCATOR_CHECKS_H
+#define SANITIZER_ALLOCATOR_CHECKS_H
+
+#include "sanitizer_errno.h"
+#include "sanitizer_internal_defs.h"
+#include "sanitizer_common.h"
+#include "sanitizer_platform.h"
+
+namespace __sanitizer {
+
+// A common errno setting logic shared by almost all sanitizer allocator APIs.
+INLINE void *SetErrnoOnNull(void *ptr) {
+  if (UNLIKELY(!ptr))
+    errno = errno_ENOMEM;
+  return ptr;
+}
+
+// In case of the check failure, the caller of the following Check... functions
+// should "return POLICY::OnBadRequest();" where POLICY is the current allocator
+// failure handling policy.
+
+// Checks aligned_alloc() parameters, verifies that the alignment is a power of
+// two and that the size is a multiple of alignment for POSIX implementation,
+// and a bit relaxed requirement for non-POSIX ones, that the size is a multiple
+// of alignment.
+INLINE bool CheckAlignedAllocAlignmentAndSize(uptr alignment, uptr size) {
+#if SANITIZER_POSIX
+  return IsPowerOfTwo(alignment) && (size & (alignment - 1)) == 0;
+#else
+  return size % alignment == 0;
+#endif
+}
+
+// Checks posix_memalign() parameters, verifies that alignment is a power of two
+// and a multiple of sizeof(void *).
+INLINE bool CheckPosixMemalignAlignment(uptr alignment) {
+  return IsPowerOfTwo(alignment) && (alignment % sizeof(void *)) == 0; // NOLINT
+}
+
+// Returns true if calloc(size, n) call overflows on size*n calculation.
+INLINE bool CheckForCallocOverflow(uptr size, uptr n) {
+  if (!size)
+    return false;
+  uptr max = (uptr)-1L;
+  return (max / size) < n;
+}
+
+} // namespace __sanitizer
+
+#endif  // SANITIZER_ALLOCATOR_CHECKS_H
diff --git a/lib/sanitizer_common/sanitizer_allocator_combined.h b/lib/sanitizer_common/sanitizer_allocator_combined.h
index 19e1ae9..efd25ca 100644
--- a/lib/sanitizer_common/sanitizer_allocator_combined.h
+++ b/lib/sanitizer_common/sanitizer_allocator_combined.h
@@ -24,31 +24,26 @@
           class SecondaryAllocator>  // NOLINT
 class CombinedAllocator {
  public:
-  void InitCommon(bool may_return_null, s32 release_to_os_interval_ms) {
+  typedef typename SecondaryAllocator::FailureHandler FailureHandler;
+
+  void InitLinkerInitialized(s32 release_to_os_interval_ms) {
     primary_.Init(release_to_os_interval_ms);
-    atomic_store(&may_return_null_, may_return_null, memory_order_relaxed);
-  }
-
-  void InitLinkerInitialized(
-      bool may_return_null, s32 release_to_os_interval_ms) {
-    secondary_.InitLinkerInitialized(may_return_null);
+    secondary_.InitLinkerInitialized();
     stats_.InitLinkerInitialized();
-    InitCommon(may_return_null, release_to_os_interval_ms);
   }
 
-  void Init(bool may_return_null, s32 release_to_os_interval_ms) {
-    secondary_.Init(may_return_null);
+  void Init(s32 release_to_os_interval_ms) {
+    primary_.Init(release_to_os_interval_ms);
+    secondary_.Init();
     stats_.Init();
-    InitCommon(may_return_null, release_to_os_interval_ms);
   }
 
-  void *Allocate(AllocatorCache *cache, uptr size, uptr alignment,
-                 bool cleared = false, bool check_rss_limit = false) {
+  void *Allocate(AllocatorCache *cache, uptr size, uptr alignment) {
     // Returning 0 on malloc(0) may break a lot of code.
     if (size == 0)
       size = 1;
-    if (size + alignment < size) return ReturnNullOrDieOnBadRequest();
-    if (check_rss_limit && RssLimitIsExceeded()) return ReturnNullOrDieOnOOM();
+    if (size + alignment < size)
+      return FailureHandler::OnBadRequest();
     uptr original_size = size;
     // If alignment requirements are to be fulfilled by the frontend allocator
     // rather than by the primary or secondary, passing an alignment lower than
@@ -56,48 +51,24 @@
     // alignment check.
     if (alignment > 8)
       size = RoundUpTo(size, alignment);
-    void *res;
-    bool from_primary = primary_.CanAllocate(size, alignment);
     // The primary allocator should return a 2^x aligned allocation when
     // requested 2^x bytes, hence using the rounded up 'size' when being
     // serviced by the primary (this is no longer true when the primary is
     // using a non-fixed base address). The secondary takes care of the
     // alignment without such requirement, and allocating 'size' would use
     // extraneous memory, so we employ 'original_size'.
-    if (from_primary)
+    void *res;
+    if (primary_.CanAllocate(size, alignment))
       res = cache->Allocate(&primary_, primary_.ClassID(size));
     else
       res = secondary_.Allocate(&stats_, original_size, alignment);
+    if (!res)
+      return FailureHandler::OnOOM();
     if (alignment > 8)
       CHECK_EQ(reinterpret_cast<uptr>(res) & (alignment - 1), 0);
-    // When serviced by the secondary, the chunk comes from a mmap allocation
-    // and will be zero'd out anyway. We only need to clear our the chunk if
-    // it was serviced by the primary, hence using the rounded up 'size'.
-    if (cleared && res && from_primary)
-      internal_bzero_aligned16(res, RoundUpTo(size, 16));
     return res;
   }
 
-  bool MayReturnNull() const {
-    return atomic_load(&may_return_null_, memory_order_acquire);
-  }
-
-  void *ReturnNullOrDieOnBadRequest() {
-    if (MayReturnNull())
-      return nullptr;
-    ReportAllocatorCannotReturnNull(false);
-  }
-
-  void *ReturnNullOrDieOnOOM() {
-    if (MayReturnNull()) return nullptr;
-    ReportAllocatorCannotReturnNull(true);
-  }
-
-  void SetMayReturnNull(bool may_return_null) {
-    secondary_.SetMayReturnNull(may_return_null);
-    atomic_store(&may_return_null_, may_return_null, memory_order_release);
-  }
-
   s32 ReleaseToOSIntervalMs() const {
     return primary_.ReleaseToOSIntervalMs();
   }
@@ -106,15 +77,6 @@
     primary_.SetReleaseToOSIntervalMs(release_to_os_interval_ms);
   }
 
-  bool RssLimitIsExceeded() {
-    return atomic_load(&rss_limit_is_exceeded_, memory_order_acquire);
-  }
-
-  void SetRssLimitIsExceeded(bool rss_limit_is_exceeded) {
-    atomic_store(&rss_limit_is_exceeded_, rss_limit_is_exceeded,
-                 memory_order_release);
-  }
-
   void Deallocate(AllocatorCache *cache, void *p) {
     if (!p) return;
     if (primary_.PointerIsMine(p))
@@ -227,7 +189,5 @@
   PrimaryAllocator primary_;
   SecondaryAllocator secondary_;
   AllocatorGlobalStats stats_;
-  atomic_uint8_t may_return_null_;
-  atomic_uint8_t rss_limit_is_exceeded_;
 };
 
diff --git a/lib/sanitizer_common/sanitizer_allocator_interface.h b/lib/sanitizer_common/sanitizer_allocator_interface.h
index 5ff6edb..13910e7 100644
--- a/lib/sanitizer_common/sanitizer_allocator_interface.h
+++ b/lib/sanitizer_common/sanitizer_allocator_interface.h
@@ -34,13 +34,12 @@
     void (*free_hook)(const void *));
 
 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-    /* OPTIONAL */ void __sanitizer_malloc_hook(void *ptr, uptr size);
+    void __sanitizer_malloc_hook(void *ptr, uptr size);
 SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-    /* OPTIONAL */ void __sanitizer_free_hook(void *ptr);
+    void __sanitizer_free_hook(void *ptr);
 
-
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-    void __sanitizer_print_memory_profile(int top_percent);
+SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
+__sanitizer_print_memory_profile(uptr top_percent, uptr max_number_of_contexts);
 }  // extern "C"
 
 #endif  // SANITIZER_ALLOCATOR_INTERFACE_H
diff --git a/lib/sanitizer_common/sanitizer_allocator_internal.h b/lib/sanitizer_common/sanitizer_allocator_internal.h
index e939cbe..a791d0d 100644
--- a/lib/sanitizer_common/sanitizer_allocator_internal.h
+++ b/lib/sanitizer_common/sanitizer_allocator_internal.h
@@ -23,27 +23,32 @@
 // purposes.
 typedef CompactSizeClassMap InternalSizeClassMap;
 
-static const uptr kInternalAllocatorSpace = 0;
-static const u64 kInternalAllocatorSize = SANITIZER_MMAP_RANGE_SIZE;
 static const uptr kInternalAllocatorRegionSizeLog = 20;
-#if SANITIZER_WORDSIZE == 32
 static const uptr kInternalAllocatorNumRegions =
-    kInternalAllocatorSize >> kInternalAllocatorRegionSizeLog;
+    SANITIZER_MMAP_RANGE_SIZE >> kInternalAllocatorRegionSizeLog;
+#if SANITIZER_WORDSIZE == 32
 typedef FlatByteMap<kInternalAllocatorNumRegions> ByteMap;
 #else
-static const uptr kInternalAllocatorNumRegions =
-    kInternalAllocatorSize >> kInternalAllocatorRegionSizeLog;
 typedef TwoLevelByteMap<(kInternalAllocatorNumRegions >> 12), 1 << 12> ByteMap;
 #endif
-typedef SizeClassAllocator32<
-    kInternalAllocatorSpace, kInternalAllocatorSize, 0, InternalSizeClassMap,
-    kInternalAllocatorRegionSizeLog, ByteMap> PrimaryInternalAllocator;
+struct AP32 {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+  static const uptr kMetadataSize = 0;
+  typedef InternalSizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = kInternalAllocatorRegionSizeLog;
+  typedef __sanitizer::ByteMap ByteMap;
+  typedef NoOpMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+typedef SizeClassAllocator32<AP32> PrimaryInternalAllocator;
 
 typedef SizeClassAllocatorLocalCache<PrimaryInternalAllocator>
     InternalAllocatorCache;
 
 typedef CombinedAllocator<PrimaryInternalAllocator, InternalAllocatorCache,
-                          LargeMmapAllocator<> > InternalAllocator;
+                          LargeMmapAllocator<NoOpMapUnmapCallback, DieOnFailure>
+                         > InternalAllocator;
 
 void *InternalAlloc(uptr size, InternalAllocatorCache *cache = nullptr,
                     uptr alignment = 0);
diff --git a/lib/sanitizer_common/sanitizer_allocator_local_cache.h b/lib/sanitizer_common/sanitizer_allocator_local_cache.h
index e1172e0..ec0742c 100644
--- a/lib/sanitizer_common/sanitizer_allocator_local_cache.h
+++ b/lib/sanitizer_common/sanitizer_allocator_local_cache.h
@@ -45,10 +45,12 @@
   void *Allocate(SizeClassAllocator *allocator, uptr class_id) {
     CHECK_NE(class_id, 0UL);
     CHECK_LT(class_id, kNumClasses);
-    stats_.Add(AllocatorStatAllocated, Allocator::ClassIdToSize(class_id));
     PerClass *c = &per_class_[class_id];
-    if (UNLIKELY(c->count == 0))
-      Refill(c, allocator, class_id);
+    if (UNLIKELY(c->count == 0)) {
+      if (UNLIKELY(!Refill(c, allocator, class_id)))
+        return nullptr;
+    }
+    stats_.Add(AllocatorStatAllocated, c->class_size);
     CHECK_GT(c->count, 0);
     CompactPtrT chunk = c->chunks[--c->count];
     void *res = reinterpret_cast<void *>(allocator->CompactPtrToPointer(
@@ -62,8 +64,8 @@
     // If the first allocator call on a new thread is a deallocation, then
     // max_count will be zero, leading to check failure.
     InitCache();
-    stats_.Sub(AllocatorStatAllocated, Allocator::ClassIdToSize(class_id));
     PerClass *c = &per_class_[class_id];
+    stats_.Sub(AllocatorStatAllocated, c->class_size);
     CHECK_NE(c->max_count, 0UL);
     if (UNLIKELY(c->count == c->max_count))
       Drain(c, allocator, class_id, c->max_count / 2);
@@ -85,6 +87,7 @@
   struct PerClass {
     u32 count;
     u32 max_count;
+    uptr class_size;
     CompactPtrT chunks[2 * SizeClassMap::kMaxNumCachedHint];
   };
   PerClass per_class_[kNumClasses];
@@ -96,16 +99,19 @@
     for (uptr i = 0; i < kNumClasses; i++) {
       PerClass *c = &per_class_[i];
       c->max_count = 2 * SizeClassMap::MaxCachedHint(i);
+      c->class_size = Allocator::ClassIdToSize(i);
     }
   }
 
-  NOINLINE void Refill(PerClass *c, SizeClassAllocator *allocator,
+  NOINLINE bool Refill(PerClass *c, SizeClassAllocator *allocator,
                        uptr class_id) {
     InitCache();
-    uptr num_requested_chunks = SizeClassMap::MaxCachedHint(class_id);
-    allocator->GetFromAllocator(&stats_, class_id, c->chunks,
-                                num_requested_chunks);
+    uptr num_requested_chunks = c->max_count / 2;
+    if (UNLIKELY(!allocator->GetFromAllocator(&stats_, class_id, c->chunks,
+                                              num_requested_chunks)))
+      return false;
     c->count = num_requested_chunks;
+    return true;
   }
 
   NOINLINE void Drain(PerClass *c, SizeClassAllocator *allocator, uptr class_id,
@@ -141,10 +147,12 @@
   void *Allocate(SizeClassAllocator *allocator, uptr class_id) {
     CHECK_NE(class_id, 0UL);
     CHECK_LT(class_id, kNumClasses);
-    stats_.Add(AllocatorStatAllocated, Allocator::ClassIdToSize(class_id));
     PerClass *c = &per_class_[class_id];
-    if (UNLIKELY(c->count == 0))
-      Refill(allocator, class_id);
+    if (UNLIKELY(c->count == 0)) {
+      if (UNLIKELY(!Refill(allocator, class_id)))
+        return nullptr;
+    }
+    stats_.Add(AllocatorStatAllocated, c->class_size);
     void *res = c->batch[--c->count];
     PREFETCH(c->batch[c->count - 1]);
     return res;
@@ -156,8 +164,8 @@
     // If the first allocator call on a new thread is a deallocation, then
     // max_count will be zero, leading to check failure.
     InitCache();
-    stats_.Sub(AllocatorStatAllocated, Allocator::ClassIdToSize(class_id));
     PerClass *c = &per_class_[class_id];
+    stats_.Sub(AllocatorStatAllocated, c->class_size);
     CHECK_NE(c->max_count, 0UL);
     if (UNLIKELY(c->count == c->max_count))
       Drain(allocator, class_id);
@@ -177,6 +185,8 @@
   struct PerClass {
     uptr count;
     uptr max_count;
+    uptr class_size;
+    uptr class_id_for_transfer_batch;
     void *batch[2 * TransferBatch::kMaxNumCached];
   };
   PerClass per_class_[kNumClasses];
@@ -185,31 +195,31 @@
   void InitCache() {
     if (per_class_[1].max_count)
       return;
+    // TransferBatch class is declared in SizeClassAllocator.
+    uptr class_id_for_transfer_batch =
+        SizeClassMap::ClassID(sizeof(TransferBatch));
     for (uptr i = 0; i < kNumClasses; i++) {
       PerClass *c = &per_class_[i];
-      c->max_count = 2 * TransferBatch::MaxCached(i);
+      uptr max_cached = TransferBatch::MaxCached(i);
+      c->max_count = 2 * max_cached;
+      c->class_size = Allocator::ClassIdToSize(i);
+      // We transfer chunks between central and thread-local free lists in
+      // batches. For small size classes we allocate batches separately. For
+      // large size classes we may use one of the chunks to store the batch.
+      // sizeof(TransferBatch) must be a power of 2 for more efficient
+      // allocation.
+      c->class_id_for_transfer_batch = (c->class_size <
+          TransferBatch::AllocationSizeRequiredForNElements(max_cached)) ?
+              class_id_for_transfer_batch : 0;
     }
   }
 
-  // TransferBatch class is declared in SizeClassAllocator.
-  // We transfer chunks between central and thread-local free lists in batches.
-  // For small size classes we allocate batches separately.
-  // For large size classes we may use one of the chunks to store the batch.
-  // sizeof(TransferBatch) must be a power of 2 for more efficient allocation.
-  static uptr SizeClassForTransferBatch(uptr class_id) {
-    if (Allocator::ClassIdToSize(class_id) <
-        TransferBatch::AllocationSizeRequiredForNElements(
-            TransferBatch::MaxCached(class_id)))
-      return SizeClassMap::ClassID(sizeof(TransferBatch));
-    return 0;
-  }
-
   // Returns a TransferBatch suitable for class_id.
   // For small size classes allocates the batch from the allocator.
   // For large size classes simply returns b.
   TransferBatch *CreateBatch(uptr class_id, SizeClassAllocator *allocator,
                              TransferBatch *b) {
-    if (uptr batch_class_id = SizeClassForTransferBatch(class_id))
+    if (uptr batch_class_id = per_class_[class_id].class_id_for_transfer_batch)
       return (TransferBatch*)Allocate(allocator, batch_class_id);
     return b;
   }
@@ -219,18 +229,21 @@
   // Does notthing for large size classes.
   void DestroyBatch(uptr class_id, SizeClassAllocator *allocator,
                     TransferBatch *b) {
-    if (uptr batch_class_id = SizeClassForTransferBatch(class_id))
+    if (uptr batch_class_id = per_class_[class_id].class_id_for_transfer_batch)
       Deallocate(allocator, batch_class_id, b);
   }
 
-  NOINLINE void Refill(SizeClassAllocator *allocator, uptr class_id) {
+  NOINLINE bool Refill(SizeClassAllocator *allocator, uptr class_id) {
     InitCache();
     PerClass *c = &per_class_[class_id];
     TransferBatch *b = allocator->AllocateBatch(&stats_, this, class_id);
+    if (UNLIKELY(!b))
+      return false;
     CHECK_GT(b->Count(), 0);
     b->CopyToArray(c->batch);
     c->count = b->Count();
     DestroyBatch(class_id, allocator, b);
+    return true;
   }
 
   NOINLINE void Drain(SizeClassAllocator *allocator, uptr class_id) {
@@ -240,6 +253,10 @@
     uptr first_idx_to_drain = c->count - cnt;
     TransferBatch *b = CreateBatch(
         class_id, allocator, (TransferBatch *)c->batch[first_idx_to_drain]);
+    // Failure to allocate a batch while releasing memory is non recoverable.
+    // TODO(alekseys): Figure out how to do it without allocating a new batch.
+    if (UNLIKELY(!b))
+      DieOnFailure::OnOOM();
     b->SetFromArray(allocator->GetRegionBeginBySizeClass(class_id),
                     &c->batch[first_idx_to_drain], cnt);
     c->count -= cnt;
diff --git a/lib/sanitizer_common/sanitizer_allocator_primary32.h b/lib/sanitizer_common/sanitizer_allocator_primary32.h
index 2882afd..e858215 100644
--- a/lib/sanitizer_common/sanitizer_allocator_primary32.h
+++ b/lib/sanitizer_common/sanitizer_allocator_primary32.h
@@ -24,7 +24,8 @@
 // be returned by MmapOrDie().
 //
 // Region:
-//   a result of a single call to MmapAlignedOrDie(kRegionSize, kRegionSize).
+//   a result of a single call to MmapAlignedOrDieOnFatalError(kRegionSize,
+//                                                             kRegionSize).
 // Since the regions are aligned by kRegionSize, there are exactly
 // kNumPossibleRegions possible regions in the address space and so we keep
 // a ByteMap possible_regions to store the size classes of each Region.
@@ -36,13 +37,27 @@
 //
 // In order to avoid false sharing the objects of this class should be
 // chache-line aligned.
-template <const uptr kSpaceBeg, const u64 kSpaceSize,
-          const uptr kMetadataSize, class SizeClassMap,
-          const uptr kRegionSizeLog,
-          class ByteMap,
-          class MapUnmapCallback = NoOpMapUnmapCallback>
+
+struct SizeClassAllocator32FlagMasks {  //  Bit masks.
+  enum {
+    kRandomShuffleChunks = 1,
+  };
+};
+
+template <class Params>
 class SizeClassAllocator32 {
  public:
+  static const uptr kSpaceBeg = Params::kSpaceBeg;
+  static const u64 kSpaceSize = Params::kSpaceSize;
+  static const uptr kMetadataSize = Params::kMetadataSize;
+  typedef typename Params::SizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = Params::kRegionSizeLog;
+  typedef typename Params::ByteMap ByteMap;
+  typedef typename Params::MapUnmapCallback MapUnmapCallback;
+
+  static const bool kRandomShuffleChunks =
+      Params::kFlags & SizeClassAllocator32FlagMasks::kRandomShuffleChunks;
+
   struct TransferBatch {
     static const uptr kMaxNumCached = SizeClassMap::kMaxNumCachedHint - 2;
     void SetFromArray(uptr region_beg_unused, void *batch[], uptr count) {
@@ -86,8 +101,7 @@
     return SizeClassMap::Size(class_id);
   }
 
-  typedef SizeClassAllocator32<kSpaceBeg, kSpaceSize, kMetadataSize,
-      SizeClassMap, kRegionSizeLog, ByteMap, MapUnmapCallback> ThisT;
+  typedef SizeClassAllocator32<Params> ThisT;
   typedef SizeClassAllocator32LocalCache<ThisT> AllocatorCache;
 
   void Init(s32 release_to_os_interval_ms) {
@@ -104,7 +118,6 @@
   }
 
   void *MapWithCallback(uptr size) {
-    size = RoundUpTo(size, GetPageSizeCached());
     void *res = MmapOrDie(size, "SizeClassAllocator32");
     MapUnmapCallback().OnMap((uptr)res, size);
     return res;
@@ -136,8 +149,9 @@
     CHECK_LT(class_id, kNumClasses);
     SizeClassInfo *sci = GetSizeClassInfo(class_id);
     SpinMutexLock l(&sci->mutex);
-    if (sci->free_list.empty())
-      PopulateFreeList(stat, c, sci, class_id);
+    if (sci->free_list.empty() &&
+        UNLIKELY(!PopulateFreeList(stat, c, sci, class_id)))
+      return nullptr;
     CHECK(!sci->free_list.empty());
     TransferBatch *b = sci->free_list.front();
     sci->free_list.pop_front();
@@ -264,11 +278,13 @@
 
   uptr AllocateRegion(AllocatorStats *stat, uptr class_id) {
     CHECK_LT(class_id, kNumClasses);
-    uptr res = reinterpret_cast<uptr>(MmapAlignedOrDie(kRegionSize, kRegionSize,
-                                      "SizeClassAllocator32"));
+    uptr res = reinterpret_cast<uptr>(MmapAlignedOrDieOnFatalError(
+        kRegionSize, kRegionSize, "SizeClassAllocator32"));
+    if (UNLIKELY(!res))
+      return 0;
     MapUnmapCallback().OnMap(res, kRegionSize);
     stat->Add(AllocatorStatMapped, kRegionSize);
-    CHECK_EQ(0U, (res & (kRegionSize - 1)));
+    CHECK(IsAligned(res, kRegionSize));
     possible_regions.set(ComputeRegionId(res), static_cast<u8>(class_id));
     return res;
   }
@@ -278,21 +294,25 @@
     return &size_class_info_array[class_id];
   }
 
-  void PopulateFreeList(AllocatorStats *stat, AllocatorCache *c,
+  bool PopulateFreeList(AllocatorStats *stat, AllocatorCache *c,
                         SizeClassInfo *sci, uptr class_id) {
     uptr size = ClassIdToSize(class_id);
     uptr reg = AllocateRegion(stat, class_id);
+    if (UNLIKELY(!reg))
+      return false;
     uptr n_chunks = kRegionSize / (size + kMetadataSize);
     uptr max_count = TransferBatch::MaxCached(class_id);
+    CHECK_GT(max_count, 0);
     TransferBatch *b = nullptr;
     for (uptr i = reg; i < reg + n_chunks * size; i += size) {
       if (!b) {
         b = c->CreateBatch(class_id, this, (TransferBatch*)i);
+        if (UNLIKELY(!b))
+          return false;
         b->Clear();
       }
       b->Add((void*)i);
       if (b->Count() == max_count) {
-        CHECK_GT(b->Count(), 0);
         sci->free_list.push_back(b);
         b = nullptr;
       }
@@ -301,10 +321,9 @@
       CHECK_GT(b->Count(), 0);
       sci->free_list.push_back(b);
     }
+    return true;
   }
 
   ByteMap possible_regions;
   SizeClassInfo size_class_info_array[kNumClasses];
 };
-
-
diff --git a/lib/sanitizer_common/sanitizer_allocator_primary64.h b/lib/sanitizer_common/sanitizer_allocator_primary64.h
index 035d92b..0c2e72c 100644
--- a/lib/sanitizer_common/sanitizer_allocator_primary64.h
+++ b/lib/sanitizer_common/sanitizer_allocator_primary64.h
@@ -80,7 +80,7 @@
       CHECK_NE(NonConstSpaceBeg, ~(uptr)0);
     }
     SetReleaseToOSIntervalMs(release_to_os_interval_ms);
-    MapWithCallback(SpaceEnd(), AdditionalSize());
+    MapWithCallbackOrDie(SpaceEnd(), AdditionalSize());
   }
 
   s32 ReleaseToOSIntervalMs() const {
@@ -92,16 +92,6 @@
                  memory_order_relaxed);
   }
 
-  void MapWithCallback(uptr beg, uptr size) {
-    CHECK_EQ(beg, reinterpret_cast<uptr>(MmapFixedOrDie(beg, size)));
-    MapUnmapCallback().OnMap(beg, size);
-  }
-
-  void UnmapWithCallback(uptr beg, uptr size) {
-    MapUnmapCallback().OnUnmap(beg, size);
-    UnmapOrDie(reinterpret_cast<void *>(beg), size);
-  }
-
   static bool CanAllocate(uptr size, uptr alignment) {
     return size <= SizeClassMap::kMaxSize &&
       alignment <= SizeClassMap::kMaxSize;
@@ -116,16 +106,20 @@
     BlockingMutexLock l(&region->mutex);
     uptr old_num_chunks = region->num_freed_chunks;
     uptr new_num_freed_chunks = old_num_chunks + n_chunks;
-    EnsureFreeArraySpace(region, region_beg, new_num_freed_chunks);
+    // Failure to allocate free array space while releasing memory is non
+    // recoverable.
+    if (UNLIKELY(!EnsureFreeArraySpace(region, region_beg,
+                                       new_num_freed_chunks)))
+      DieOnFailure::OnOOM();
     for (uptr i = 0; i < n_chunks; i++)
       free_array[old_num_chunks + i] = chunks[i];
     region->num_freed_chunks = new_num_freed_chunks;
-    region->n_freed += n_chunks;
+    region->stats.n_freed += n_chunks;
 
     MaybeReleaseToOS(class_id);
   }
 
-  NOINLINE void GetFromAllocator(AllocatorStats *stat, uptr class_id,
+  NOINLINE bool GetFromAllocator(AllocatorStats *stat, uptr class_id,
                                  CompactPtrT *chunks, uptr n_chunks) {
     RegionInfo *region = GetRegionInfo(class_id);
     uptr region_beg = GetRegionBeginBySizeClass(class_id);
@@ -133,18 +127,19 @@
 
     BlockingMutexLock l(&region->mutex);
     if (UNLIKELY(region->num_freed_chunks < n_chunks)) {
-      PopulateFreeArray(stat, class_id, region,
-                        n_chunks - region->num_freed_chunks);
+      if (UNLIKELY(!PopulateFreeArray(stat, class_id, region,
+                                      n_chunks - region->num_freed_chunks)))
+        return false;
       CHECK_GE(region->num_freed_chunks, n_chunks);
     }
     region->num_freed_chunks -= n_chunks;
     uptr base_idx = region->num_freed_chunks;
     for (uptr i = 0; i < n_chunks; i++)
       chunks[i] = free_array[base_idx + i];
-    region->n_allocated += n_chunks;
+    region->stats.n_allocated += n_chunks;
+    return true;
   }
 
-
   bool PointerIsMine(const void *p) {
     uptr P = reinterpret_cast<uptr>(p);
     if (kUsingConstantSpaceBeg && (kSpaceBeg % kSpaceSize) == 0)
@@ -211,7 +206,7 @@
 
   // Test-only.
   void TestOnlyUnmap() {
-    UnmapWithCallback(SpaceBeg(), kSpaceSize + AdditionalSize());
+    UnmapWithCallbackOrDie(SpaceBeg(), kSpaceSize + AdditionalSize());
   }
 
   static void FillMemoryProfile(uptr start, uptr rss, bool file, uptr *stats,
@@ -224,15 +219,15 @@
   void PrintStats(uptr class_id, uptr rss) {
     RegionInfo *region = GetRegionInfo(class_id);
     if (region->mapped_user == 0) return;
-    uptr in_use = region->n_allocated - region->n_freed;
+    uptr in_use = region->stats.n_allocated - region->stats.n_freed;
     uptr avail_chunks = region->allocated_user / ClassIdToSize(class_id);
     Printf(
-        "  %02zd (%6zd): mapped: %6zdK allocs: %7zd frees: %7zd inuse: %6zd "
+        "%s %02zd (%6zd): mapped: %6zdK allocs: %7zd frees: %7zd inuse: %6zd "
         "num_freed_chunks %7zd avail: %6zd rss: %6zdK releases: %6zd\n",
-        class_id, ClassIdToSize(class_id), region->mapped_user >> 10,
-        region->n_allocated, region->n_freed, in_use,
-        region->num_freed_chunks, avail_chunks, rss >> 10,
-        region->rtoi.num_releases);
+        region->exhausted ? "F" : " ", class_id, ClassIdToSize(class_id),
+        region->mapped_user >> 10, region->stats.n_allocated,
+        region->stats.n_freed, in_use, region->num_freed_chunks, avail_chunks,
+        rss >> 10, region->rtoi.num_releases);
   }
 
   void PrintStats() {
@@ -242,8 +237,8 @@
     for (uptr class_id = 1; class_id < kNumClasses; class_id++) {
       RegionInfo *region = GetRegionInfo(class_id);
       total_mapped += region->mapped_user;
-      n_allocated += region->n_allocated;
-      n_freed += region->n_freed;
+      n_allocated += region->stats.n_allocated;
+      n_freed += region->stats.n_freed;
     }
     Printf("Stats: SizeClassAllocator64: %zdM mapped in %zd allocations; "
            "remains %zd\n",
@@ -326,6 +321,11 @@
 
   atomic_sint32_t release_to_os_interval_ms_;
 
+  struct Stats {
+    uptr n_allocated;
+    uptr n_freed;
+  };
+
   struct ReleaseToOsInfo {
     uptr n_freed_at_last_release;
     uptr num_releases;
@@ -340,8 +340,9 @@
     uptr allocated_meta;  // Bytes allocated for metadata.
     uptr mapped_user;  // Bytes mapped for user memory.
     uptr mapped_meta;  // Bytes mapped for metadata.
-    u32 rand_state; // Seed for random shuffle, used if kRandomShuffleChunks.
-    uptr n_allocated, n_freed;  // Just stats.
+    u32 rand_state;  // Seed for random shuffle, used if kRandomShuffleChunks.
+    bool exhausted;  // Whether region is out of space for new chunks.
+    Stats stats;
     ReleaseToOsInfo rtoi;
   };
   COMPILER_CHECK(sizeof(RegionInfo) >= kCacheLineSize);
@@ -386,7 +387,26 @@
                                            kFreeArraySize);
   }
 
-  void EnsureFreeArraySpace(RegionInfo *region, uptr region_beg,
+  bool MapWithCallback(uptr beg, uptr size) {
+    uptr mapped = reinterpret_cast<uptr>(MmapFixedOrDieOnFatalError(beg, size));
+    if (UNLIKELY(!mapped))
+      return false;
+    CHECK_EQ(beg, mapped);
+    MapUnmapCallback().OnMap(beg, size);
+    return true;
+  }
+
+  void MapWithCallbackOrDie(uptr beg, uptr size) {
+    CHECK_EQ(beg, reinterpret_cast<uptr>(MmapFixedOrDie(beg, size)));
+    MapUnmapCallback().OnMap(beg, size);
+  }
+
+  void UnmapWithCallbackOrDie(uptr beg, uptr size) {
+    MapUnmapCallback().OnUnmap(beg, size);
+    UnmapOrDie(reinterpret_cast<void *>(beg), size);
+  }
+
+  bool EnsureFreeArraySpace(RegionInfo *region, uptr region_beg,
                             uptr num_freed_chunks) {
     uptr needed_space = num_freed_chunks * sizeof(CompactPtrT);
     if (region->mapped_free_array < needed_space) {
@@ -395,66 +415,87 @@
       uptr current_map_end = reinterpret_cast<uptr>(GetFreeArray(region_beg)) +
                              region->mapped_free_array;
       uptr new_map_size = new_mapped_free_array - region->mapped_free_array;
-      MapWithCallback(current_map_end, new_map_size);
+      if (UNLIKELY(!MapWithCallback(current_map_end, new_map_size)))
+        return false;
       region->mapped_free_array = new_mapped_free_array;
     }
+    return true;
   }
 
-
-  NOINLINE void PopulateFreeArray(AllocatorStats *stat, uptr class_id,
+  NOINLINE bool PopulateFreeArray(AllocatorStats *stat, uptr class_id,
                                   RegionInfo *region, uptr requested_count) {
     // region->mutex is held.
-    uptr size = ClassIdToSize(class_id);
-    uptr beg_idx = region->allocated_user;
-    uptr end_idx = beg_idx + requested_count * size;
-    uptr region_beg = GetRegionBeginBySizeClass(class_id);
-    if (end_idx > region->mapped_user) {
+    const uptr size = ClassIdToSize(class_id);
+    const uptr new_space_beg = region->allocated_user;
+    const uptr new_space_end = new_space_beg + requested_count * size;
+    const uptr region_beg = GetRegionBeginBySizeClass(class_id);
+
+    // Map more space for chunks, if necessary.
+    if (new_space_end > region->mapped_user) {
       if (!kUsingConstantSpaceBeg && region->mapped_user == 0)
         region->rand_state = static_cast<u32>(region_beg >> 12);  // From ASLR.
       // Do the mmap for the user memory.
       uptr map_size = kUserMapSize;
-      while (end_idx > region->mapped_user + map_size)
+      while (new_space_end > region->mapped_user + map_size)
         map_size += kUserMapSize;
-      CHECK_GE(region->mapped_user + map_size, end_idx);
-      MapWithCallback(region_beg + region->mapped_user, map_size);
+      CHECK_GE(region->mapped_user + map_size, new_space_end);
+      if (UNLIKELY(!MapWithCallback(region_beg + region->mapped_user,
+                                    map_size)))
+        return false;
       stat->Add(AllocatorStatMapped, map_size);
       region->mapped_user += map_size;
     }
-    CompactPtrT *free_array = GetFreeArray(region_beg);
-    uptr total_count = (region->mapped_user - beg_idx) / size;
-    uptr num_freed_chunks = region->num_freed_chunks;
-    EnsureFreeArraySpace(region, region_beg, num_freed_chunks + total_count);
-    for (uptr i = 0; i < total_count; i++) {
-      uptr chunk = beg_idx + i * size;
-      free_array[num_freed_chunks + total_count - 1 - i] =
-          PointerToCompactPtr(0, chunk);
-    }
-    if (kRandomShuffleChunks)
-      RandomShuffle(&free_array[num_freed_chunks], total_count,
-                    &region->rand_state);
-    region->num_freed_chunks += total_count;
-    region->allocated_user += total_count * size;
-    CHECK_LE(region->allocated_user, region->mapped_user);
+    const uptr new_chunks_count = (region->mapped_user - new_space_beg) / size;
 
-    region->allocated_meta += total_count * kMetadataSize;
-    if (region->allocated_meta > region->mapped_meta) {
-      uptr map_size = kMetaMapSize;
-      while (region->allocated_meta > region->mapped_meta + map_size)
-        map_size += kMetaMapSize;
-      // Do the mmap for the metadata.
-      CHECK_GE(region->mapped_meta + map_size, region->allocated_meta);
-      MapWithCallback(GetMetadataEnd(region_beg) -
-                      region->mapped_meta - map_size, map_size);
-      region->mapped_meta += map_size;
-    }
-    CHECK_LE(region->allocated_meta, region->mapped_meta);
-    if (region->mapped_user + region->mapped_meta >
+    // Calculate the required space for metadata.
+    const uptr requested_allocated_meta =
+        region->allocated_meta + new_chunks_count * kMetadataSize;
+    uptr requested_mapped_meta = region->mapped_meta;
+    while (requested_allocated_meta > requested_mapped_meta)
+      requested_mapped_meta += kMetaMapSize;
+    // Check whether this size class is exhausted.
+    if (region->mapped_user + requested_mapped_meta >
         kRegionSize - kFreeArraySize) {
-      Printf("%s: Out of memory. Dying. ", SanitizerToolName);
-      Printf("The process has exhausted %zuMB for size class %zu.\n",
-          kRegionSize / 1024 / 1024, size);
-      Die();
+      if (!region->exhausted) {
+        region->exhausted = true;
+        Printf("%s: Out of memory. ", SanitizerToolName);
+        Printf("The process has exhausted %zuMB for size class %zu.\n",
+               kRegionSize >> 20, size);
+      }
+      return false;
     }
+    // Map more space for metadata, if necessary.
+    if (requested_mapped_meta > region->mapped_meta) {
+      if (UNLIKELY(!MapWithCallback(
+              GetMetadataEnd(region_beg) - requested_mapped_meta,
+              requested_mapped_meta - region->mapped_meta)))
+        return false;
+      region->mapped_meta = requested_mapped_meta;
+    }
+
+    // If necessary, allocate more space for the free array and populate it with
+    // newly allocated chunks.
+    const uptr total_freed_chunks = region->num_freed_chunks + new_chunks_count;
+    if (UNLIKELY(!EnsureFreeArraySpace(region, region_beg, total_freed_chunks)))
+      return false;
+    CompactPtrT *free_array = GetFreeArray(region_beg);
+    for (uptr i = 0, chunk = new_space_beg; i < new_chunks_count;
+         i++, chunk += size)
+      free_array[total_freed_chunks - 1 - i] = PointerToCompactPtr(0, chunk);
+    if (kRandomShuffleChunks)
+      RandomShuffle(&free_array[region->num_freed_chunks], new_chunks_count,
+                    &region->rand_state);
+
+    // All necessary memory is mapped and now it is safe to advance all
+    // 'allocated_*' counters.
+    region->num_freed_chunks += new_chunks_count;
+    region->allocated_user += new_chunks_count * size;
+    CHECK_LE(region->allocated_user, region->mapped_user);
+    region->allocated_meta = requested_allocated_meta;
+    CHECK_LE(region->allocated_meta, region->mapped_meta);
+    region->exhausted = false;
+
+    return true;
   }
 
   void MaybeReleaseChunkRange(uptr region_beg, uptr chunk_size,
@@ -478,8 +519,8 @@
     uptr n = region->num_freed_chunks;
     if (n * chunk_size < page_size)
       return;  // No chance to release anything.
-    if ((region->n_freed - region->rtoi.n_freed_at_last_release) * chunk_size <
-        page_size) {
+    if ((region->stats.n_freed -
+         region->rtoi.n_freed_at_last_release) * chunk_size < page_size) {
       return;  // Nothing new to release.
     }
 
@@ -508,7 +549,7 @@
         CHECK_GT(chunk - prev, scaled_chunk_size);
         if (prev + scaled_chunk_size - range_beg >= kScaledGranularity) {
           MaybeReleaseChunkRange(region_beg, chunk_size, range_beg, prev);
-          region->rtoi.n_freed_at_last_release = region->n_freed;
+          region->rtoi.n_freed_at_last_release = region->stats.n_freed;
           region->rtoi.num_releases++;
         }
         range_beg = chunk;
@@ -517,5 +558,3 @@
     }
   }
 };
-
-
diff --git a/lib/sanitizer_common/sanitizer_allocator_secondary.h b/lib/sanitizer_common/sanitizer_allocator_secondary.h
index 2e98e59..261dfb5 100644
--- a/lib/sanitizer_common/sanitizer_allocator_secondary.h
+++ b/lib/sanitizer_common/sanitizer_allocator_secondary.h
@@ -17,17 +17,19 @@
 // This class can (de)allocate only large chunks of memory using mmap/unmap.
 // The main purpose of this allocator is to cover large and rare allocation
 // sizes not covered by more efficient allocators (e.g. SizeClassAllocator64).
-template <class MapUnmapCallback = NoOpMapUnmapCallback>
+template <class MapUnmapCallback = NoOpMapUnmapCallback,
+          class FailureHandlerT = ReturnNullOrDieOnFailure>
 class LargeMmapAllocator {
  public:
-  void InitLinkerInitialized(bool may_return_null) {
+  typedef FailureHandlerT FailureHandler;
+
+  void InitLinkerInitialized() {
     page_size_ = GetPageSizeCached();
-    atomic_store(&may_return_null_, may_return_null, memory_order_relaxed);
   }
 
-  void Init(bool may_return_null) {
+  void Init() {
     internal_memset(this, 0, sizeof(*this));
-    InitLinkerInitialized(may_return_null);
+    InitLinkerInitialized();
   }
 
   void *Allocate(AllocatorStats *stat, uptr size, uptr alignment) {
@@ -36,9 +38,12 @@
     if (alignment > page_size_)
       map_size += alignment;
     // Overflow.
-    if (map_size < size) return ReturnNullOrDieOnBadRequest();
+    if (map_size < size)
+      return FailureHandler::OnBadRequest();
     uptr map_beg = reinterpret_cast<uptr>(
-        MmapOrDie(map_size, "LargeMmapAllocator"));
+        MmapOrDieOnFatalError(map_size, "LargeMmapAllocator"));
+    if (!map_beg)
+      return FailureHandler::OnOOM();
     CHECK(IsAligned(map_beg, page_size_));
     MapUnmapCallback().OnMap(map_beg, map_size);
     uptr map_end = map_beg + map_size;
@@ -72,24 +77,6 @@
     return reinterpret_cast<void*>(res);
   }
 
-  bool MayReturnNull() const {
-    return atomic_load(&may_return_null_, memory_order_acquire);
-  }
-
-  void *ReturnNullOrDieOnBadRequest() {
-    if (MayReturnNull()) return nullptr;
-    ReportAllocatorCannotReturnNull(false);
-  }
-
-  void *ReturnNullOrDieOnOOM() {
-    if (MayReturnNull()) return nullptr;
-    ReportAllocatorCannotReturnNull(true);
-  }
-
-  void SetMayReturnNull(bool may_return_null) {
-    atomic_store(&may_return_null_, may_return_null, memory_order_release);
-  }
-
   void Deallocate(AllocatorStats *stat, void *p) {
     Header *h = GetHeader(p);
     {
@@ -275,7 +262,6 @@
   struct Stats {
     uptr n_allocs, n_frees, currently_allocated, max_allocated, by_size_log[64];
   } stats;
-  atomic_uint8_t may_return_null_;
   SpinMutex mutex_;
 };
 
diff --git a/lib/sanitizer_common/sanitizer_atomic_clang.h b/lib/sanitizer_common/sanitizer_atomic_clang.h
index 38363e8..65b3a38 100644
--- a/lib/sanitizer_common/sanitizer_atomic_clang.h
+++ b/lib/sanitizer_common/sanitizer_atomic_clang.h
@@ -71,16 +71,25 @@
   return v;
 }
 
-template<typename T>
-INLINE bool atomic_compare_exchange_strong(volatile T *a,
-                                           typename T::Type *cmp,
+template <typename T>
+INLINE bool atomic_compare_exchange_strong(volatile T *a, typename T::Type *cmp,
                                            typename T::Type xchg,
                                            memory_order mo) {
   typedef typename T::Type Type;
   Type cmpv = *cmp;
-  Type prev = __sync_val_compare_and_swap(&a->val_dont_use, cmpv, xchg);
-  if (prev == cmpv)
-    return true;
+  Type prev;
+#if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32
+  if (sizeof(*a) == 8) {
+    Type volatile *val_ptr = const_cast<Type volatile *>(&a->val_dont_use);
+    prev = __mips_sync_val_compare_and_swap<u64>(
+        reinterpret_cast<u64 volatile *>(val_ptr), (u64)cmpv, (u64)xchg);
+  } else {
+    prev = __sync_val_compare_and_swap(&a->val_dont_use, cmpv, xchg);
+  }
+#else
+  prev = __sync_val_compare_and_swap(&a->val_dont_use, cmpv, xchg);
+#endif
+  if (prev == cmpv) return true;
   *cmp = prev;
   return false;
 }
diff --git a/lib/sanitizer_common/sanitizer_atomic_clang_other.h b/lib/sanitizer_common/sanitizer_atomic_clang_other.h
index 099b9f7..d2acc31 100644
--- a/lib/sanitizer_common/sanitizer_atomic_clang_other.h
+++ b/lib/sanitizer_common/sanitizer_atomic_clang_other.h
@@ -17,6 +17,56 @@
 
 namespace __sanitizer {
 
+// MIPS32 does not support atomic > 4 bytes. To address this lack of
+// functionality, the sanitizer library provides helper methods which use an
+// internal spin lock mechanism to emulate atomic oprations when the size is
+// 8 bytes.
+#if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32
+static void __spin_lock(volatile int *lock) {
+  while (__sync_lock_test_and_set(lock, 1))
+    while (*lock) {
+    }
+}
+
+static void __spin_unlock(volatile int *lock) { __sync_lock_release(lock); }
+
+
+// Make sure the lock is on its own cache line to prevent false sharing.
+// Put it inside a struct that is aligned and padded to the typical MIPS
+// cacheline which is 32 bytes.
+static struct {
+  int lock;
+  char pad[32 - sizeof(int)];
+} __attribute__((aligned(32))) lock = {0};
+
+template <class T>
+T __mips_sync_fetch_and_add(volatile T *ptr, T val) {
+  T ret;
+
+  __spin_lock(&lock.lock);
+
+  ret = *ptr;
+  *ptr = ret + val;
+
+  __spin_unlock(&lock.lock);
+
+  return ret;
+}
+
+template <class T>
+T __mips_sync_val_compare_and_swap(volatile T *ptr, T oldval, T newval) {
+  T ret;
+  __spin_lock(&lock.lock);
+
+  ret = *ptr;
+  if (ret == oldval) *ptr = newval;
+
+  __spin_unlock(&lock.lock);
+
+  return ret;
+}
+#endif
+
 INLINE void proc_yield(int cnt) {
   __asm__ __volatile__("" ::: "memory");
 }
@@ -53,8 +103,15 @@
     // 64-bit load on 32-bit platform.
     // Gross, but simple and reliable.
     // Assume that it is not in read-only memory.
+#if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32
+    typename T::Type volatile *val_ptr =
+        const_cast<typename T::Type volatile *>(&a->val_dont_use);
+    v = __mips_sync_fetch_and_add<u64>(
+        reinterpret_cast<u64 volatile *>(val_ptr), 0);
+#else
     v = __sync_fetch_and_add(
         const_cast<typename T::Type volatile *>(&a->val_dont_use), 0);
+#endif
   }
   return v;
 }
@@ -84,7 +141,14 @@
     typename T::Type cmp = a->val_dont_use;
     typename T::Type cur;
     for (;;) {
+#if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32
+      typename T::Type volatile *val_ptr =
+          const_cast<typename T::Type volatile *>(&a->val_dont_use);
+      cur = __mips_sync_val_compare_and_swap<u64>(
+          reinterpret_cast<u64 volatile *>(val_ptr), (u64)cmp, (u64)v);
+#else
       cur = __sync_val_compare_and_swap(&a->val_dont_use, cmp, v);
+#endif
       if (cmp == v)
         break;
       cmp = cur;
diff --git a/lib/sanitizer_common/sanitizer_common.cc b/lib/sanitizer_common/sanitizer_common.cc
index 5f492fe..7e6f8fc 100644
--- a/lib/sanitizer_common/sanitizer_common.cc
+++ b/lib/sanitizer_common/sanitizer_common.cc
@@ -284,9 +284,10 @@
   }
 }
 
-void LoadedModule::addAddressRange(uptr beg, uptr end, bool executable) {
+void LoadedModule::addAddressRange(uptr beg, uptr end, bool executable,
+                                   bool writable) {
   void *mem = InternalAlloc(sizeof(AddressRange));
-  AddressRange *r = new(mem) AddressRange(beg, end, executable);
+  AddressRange *r = new(mem) AddressRange(beg, end, executable, writable);
   ranges_.push_back(r);
   if (executable && end > max_executable_address_)
     max_executable_address_ = end;
@@ -490,7 +491,8 @@
   report_file.fd_pid = internal_getpid();
 }
 
-void __sanitizer_report_error_summary(const char *error_summary) {
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_report_error_summary,
+                             const char *error_summary) {
   Printf("%s\n", error_summary);
 }
 
@@ -505,11 +507,4 @@
                                               void (*free_hook)(const void *)) {
   return InstallMallocFreeHooks(malloc_hook, free_hook);
 }
-
-#if !SANITIZER_GO && !SANITIZER_SUPPORTS_WEAK_HOOKS
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_print_memory_profile(int top_percent) {
-  (void)top_percent;
-}
-#endif
 } // extern "C"
diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h
index e6d73e7..89aae57 100644
--- a/lib/sanitizer_common/sanitizer_common.h
+++ b/lib/sanitizer_common/sanitizer_common.h
@@ -72,7 +72,7 @@
 uptr GetMmapGranularity();
 uptr GetMaxVirtualAddress();
 // Threads
-uptr GetTid();
+tid_t GetTid();
 uptr GetThreadSelf();
 void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
                                 uptr *stack_bottom);
@@ -85,21 +85,30 @@
   return MmapOrDie(size, mem_type, /*raw_report*/ true);
 }
 void UnmapOrDie(void *addr, uptr size);
+// Behaves just like MmapOrDie, but tolerates out of memory condition, in that
+// case returns nullptr.
+void *MmapOrDieOnFatalError(uptr size, const char *mem_type);
 void *MmapFixedNoReserve(uptr fixed_addr, uptr size,
                          const char *name = nullptr);
 void *MmapNoReserveOrDie(uptr size, const char *mem_type);
 void *MmapFixedOrDie(uptr fixed_addr, uptr size);
+// Behaves just like MmapFixedOrDie, but tolerates out of memory condition, in
+// that case returns nullptr.
+void *MmapFixedOrDieOnFatalError(uptr fixed_addr, uptr size);
 void *MmapFixedNoAccess(uptr fixed_addr, uptr size, const char *name = nullptr);
 void *MmapNoAccess(uptr size);
 // Map aligned chunk of address space; size and alignment are powers of two.
-void *MmapAlignedOrDie(uptr size, uptr alignment, const char *mem_type);
+// Dies on all but out of memory errors, in the latter case returns nullptr.
+void *MmapAlignedOrDieOnFatalError(uptr size, uptr alignment,
+                                   const char *mem_type);
 // Disallow access to a memory range.  Use MmapFixedNoAccess to allocate an
 // unaccessible memory.
 bool MprotectNoAccess(uptr addr, uptr size);
 bool MprotectReadOnly(uptr addr, uptr size);
 
 // Find an available address space.
-uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding);
+uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,
+                              uptr *largest_gap_found);
 
 // Used to check if we can map shadow memory to a fixed location.
 bool MemoryRangeIsAvailable(uptr range_start, uptr range_end);
@@ -317,15 +326,9 @@
 void SetAddressSpaceUnlimited();
 void AdjustStackSize(void *attr);
 void PrepareForSandboxing(__sanitizer_sandbox_arguments *args);
-void CovPrepareForSandboxing(__sanitizer_sandbox_arguments *args);
 void SetSandboxingCallback(void (*f)());
 
-void CoverageUpdateMapping();
-void CovBeforeFork();
-void CovAfterFork(int child_pid);
-
 void InitializeCoverage(bool enabled, const char *coverage_dir);
-void ReInitializeCoverage(bool enabled, const char *coverage_dir);
 
 void InitTlsSize();
 uptr GetTlsSize();
@@ -380,8 +383,9 @@
 
 // Functions related to signal handling.
 typedef void (*SignalHandlerType)(int, void *, void *);
-bool IsHandledDeadlySignal(int signum);
+HandleSignalMode GetHandleSignalMode(int signum);
 void InstallDeadlySignalHandlers(SignalHandlerType handler);
+const char *DescribeSignalOrException(int signo);
 // Alternative signal stack (POSIX-only).
 void SetAlternateSignalStack();
 void UnsetAlternateSignalStack();
@@ -716,7 +720,7 @@
   void set(const char *module_name, uptr base_address, ModuleArch arch,
            u8 uuid[kModuleUUIDSize], bool instrumented);
   void clear();
-  void addAddressRange(uptr beg, uptr end, bool executable);
+  void addAddressRange(uptr beg, uptr end, bool executable, bool writable);
   bool containsAddress(uptr address) const;
 
   const char *full_name() const { return full_name_; }
@@ -731,9 +735,14 @@
     uptr beg;
     uptr end;
     bool executable;
+    bool writable;
 
-    AddressRange(uptr beg, uptr end, bool executable)
-        : next(nullptr), beg(beg), end(end), executable(executable) {}
+    AddressRange(uptr beg, uptr end, bool executable, bool writable)
+        : next(nullptr),
+          beg(beg),
+          end(end),
+          executable(executable),
+          writable(writable) {}
   };
 
   const IntrusiveList<AddressRange> &ranges() const { return ranges_; }
@@ -805,8 +814,11 @@
 #if SANITIZER_LINUX
 // Initialize Android logging. Any writes before this are silently lost.
 void AndroidLogInit();
+void SetAbortMessage(const char *);
 #else
 INLINE void AndroidLogInit() {}
+// FIXME: MacOS implementation could use CRSetCrashLogMessage.
+INLINE void SetAbortMessage(const char *) {}
 #endif
 
 #if SANITIZER_ANDROID
@@ -914,6 +926,12 @@
 // indicate that sanitizer allocator should not attempt to release memory to OS.
 const s32 kReleaseToOSIntervalNever = -1;
 
+void CheckNoDeepBind(const char *filename, int flag);
+
+// Returns the requested amount of random data (up to 256 bytes) that can then
+// be used to seed a PRNG.
+bool GetRandom(void *buffer, uptr length);
+
 }  // namespace __sanitizer
 
 inline void *operator new(__sanitizer::operator_new_size_type size,
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc
index ca571d1..8607bf4 100644
--- a/lib/sanitizer_common/sanitizer_common_interceptors.inc
+++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc
@@ -24,7 +24,8 @@
 //   COMMON_INTERCEPTOR_SET_THREAD_NAME
 //   COMMON_INTERCEPTOR_ON_DLOPEN
 //   COMMON_INTERCEPTOR_ON_EXIT
-//   COMMON_INTERCEPTOR_MUTEX_LOCK
+//   COMMON_INTERCEPTOR_MUTEX_PRE_LOCK
+//   COMMON_INTERCEPTOR_MUTEX_POST_LOCK
 //   COMMON_INTERCEPTOR_MUTEX_UNLOCK
 //   COMMON_INTERCEPTOR_MUTEX_REPAIR
 //   COMMON_INTERCEPTOR_SET_PTHREAD_NAME
@@ -33,10 +34,13 @@
 //   COMMON_INTERCEPTOR_MEMSET_IMPL
 //   COMMON_INTERCEPTOR_MEMMOVE_IMPL
 //   COMMON_INTERCEPTOR_MEMCPY_IMPL
+//   COMMON_INTERCEPTOR_COPY_STRING
+//   COMMON_INTERCEPTOR_STRNDUP_IMPL
 //===----------------------------------------------------------------------===//
 
 #include "interception/interception.h"
 #include "sanitizer_addrhashmap.h"
+#include "sanitizer_errno.h"
 #include "sanitizer_placement_new.h"
 #include "sanitizer_platform_interceptors.h"
 #include "sanitizer_tls_get_addr.h"
@@ -44,15 +48,9 @@
 #include <stdarg.h>
 
 #if SANITIZER_INTERCEPTOR_HOOKS
-#define CALL_WEAK_INTERCEPTOR_HOOK(f, ...)                                     \
-  do {                                                                         \
-    if (f)                                                                     \
-      f(__VA_ARGS__);                                                          \
-  } while (false);
-#define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...)                                  \
-  extern "C" {                                                                 \
-  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void f(__VA_ARGS__);  \
-  } // extern "C"
+#define CALL_WEAK_INTERCEPTOR_HOOK(f, ...) f(__VA_ARGS__);
+#define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...) \
+  SANITIZER_INTERFACE_WEAK_DEF(void, f, __VA_ARGS__) {}
 #else
 #define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...)
 #define CALL_WEAK_INTERCEPTOR_HOOK(f, ...)
@@ -95,8 +93,12 @@
 #define COMMON_INTERCEPTOR_FD_ACCESS(ctx, fd) {}
 #endif
 
-#ifndef COMMON_INTERCEPTOR_MUTEX_LOCK
-#define COMMON_INTERCEPTOR_MUTEX_LOCK(ctx, m) {}
+#ifndef COMMON_INTERCEPTOR_MUTEX_PRE_LOCK
+#define COMMON_INTERCEPTOR_MUTEX_PRE_LOCK(ctx, m) {}
+#endif
+
+#ifndef COMMON_INTERCEPTOR_MUTEX_POST_LOCK
+#define COMMON_INTERCEPTOR_MUTEX_POST_LOCK(ctx, m) {}
 #endif
 
 #ifndef COMMON_INTERCEPTOR_MUTEX_UNLOCK
@@ -140,15 +142,13 @@
 #define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (0)
 #endif
 
-#define COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s, len, n)       \
-    COMMON_INTERCEPTOR_READ_RANGE((ctx), (s),                       \
-      common_flags()->strict_string_checks ? (len) + 1 : (n) )
-
 #define COMMON_INTERCEPTOR_READ_STRING(ctx, s, n)                   \
-    COMMON_INTERCEPTOR_READ_STRING_OF_LEN((ctx), (s), REAL(strlen)(s), (n))
+    COMMON_INTERCEPTOR_READ_RANGE((ctx), (s),                       \
+      common_flags()->strict_string_checks ? (REAL(strlen)(s)) + 1 : (n) )
 
 #ifndef COMMON_INTERCEPTOR_ON_DLOPEN
-#define COMMON_INTERCEPTOR_ON_DLOPEN(filename, flag) {}
+#define COMMON_INTERCEPTOR_ON_DLOPEN(filename, flag) \
+  CheckNoDeepBind(filename, flag);
 #endif
 
 #ifndef COMMON_INTERCEPTOR_GET_TLS_RANGE
@@ -220,6 +220,24 @@
   }
 #endif
 
+#ifndef COMMON_INTERCEPTOR_COPY_STRING
+#define COMMON_INTERCEPTOR_COPY_STRING(ctx, to, from, size) {}
+#endif
+
+#ifndef COMMON_INTERCEPTOR_STRNDUP_IMPL
+#define COMMON_INTERCEPTOR_STRNDUP_IMPL(ctx, s, size)                         \
+  COMMON_INTERCEPTOR_ENTER(ctx, strndup, s, size);                            \
+  uptr copy_length = internal_strnlen(s, size);                               \
+  char *new_mem = (char *)WRAP(malloc)(copy_length + 1);                      \
+  if (common_flags()->intercept_strndup) {                                    \
+    COMMON_INTERCEPTOR_READ_STRING(ctx, s, Min(size, copy_length + 1));       \
+  }                                                                           \
+  COMMON_INTERCEPTOR_COPY_STRING(ctx, new_mem, s, copy_length);               \
+  internal_memcpy(new_mem, s, copy_length);                                   \
+  new_mem[copy_length] = '\0';                                                \
+  return new_mem;
+#endif
+
 struct FileMetadata {
   // For open_memstream().
   char **addr;
@@ -303,11 +321,31 @@
 #define INIT_STRNLEN
 #endif
 
+#if SANITIZER_INTERCEPT_STRNDUP
+INTERCEPTOR(char*, strndup, const char *s, uptr size) {
+  void *ctx;
+  COMMON_INTERCEPTOR_STRNDUP_IMPL(ctx, s, size);
+}
+#define INIT_STRNDUP COMMON_INTERCEPT_FUNCTION(strndup)
+#else
+#define INIT_STRNDUP
+#endif // SANITIZER_INTERCEPT_STRNDUP
+
+#if SANITIZER_INTERCEPT___STRNDUP
+INTERCEPTOR(char*, __strndup, const char *s, uptr size) {
+  void *ctx;
+  COMMON_INTERCEPTOR_STRNDUP_IMPL(ctx, s, size);
+}
+#define INIT___STRNDUP COMMON_INTERCEPT_FUNCTION(__strndup)
+#else
+#define INIT___STRNDUP
+#endif // SANITIZER_INTERCEPT___STRNDUP
+
 #if SANITIZER_INTERCEPT_TEXTDOMAIN
 INTERCEPTOR(char*, textdomain, const char *domainname) {
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, textdomain, domainname);
-  COMMON_INTERCEPTOR_READ_STRING(ctx, domainname, 0);
+  if (domainname) COMMON_INTERCEPTOR_READ_STRING(ctx, domainname, 0);
   char *domain = REAL(textdomain)(domainname);
   if (domain) {
     COMMON_INTERCEPTOR_INITIALIZE_RANGE(domain, REAL(strlen)(domain) + 1);
@@ -450,8 +488,7 @@
                                const char *s2) {
     uptr len1 = REAL(strlen)(s1);
     uptr len2 = REAL(strlen)(s2);
-    COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s1, len1,
-                                          r ? r - s1 + len2 : len1 + 1);
+    COMMON_INTERCEPTOR_READ_STRING(ctx, s1, r ? r - s1 + len2 : len1 + 1);
     COMMON_INTERCEPTOR_READ_RANGE(ctx, s2, len2 + 1);
 }
 #endif
@@ -500,6 +537,52 @@
 #define INIT_STRCASESTR
 #endif
 
+#if SANITIZER_INTERCEPT_STRTOK
+
+INTERCEPTOR(char*, strtok, char *str, const char *delimiters) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, strtok, str, delimiters);
+  if (!common_flags()->intercept_strtok) {
+    return REAL(strtok)(str, delimiters);
+  }
+  if (common_flags()->strict_string_checks) {
+    // If strict_string_checks is enabled, we check the whole first argument
+    // string on the first call (strtok saves this string in a static buffer
+    // for subsequent calls). We do not need to check strtok's result.
+    // As the delimiters can change, we check them every call.
+    if (str != nullptr) {
+      COMMON_INTERCEPTOR_READ_RANGE(ctx, str, REAL(strlen)(str) + 1);
+    }
+    COMMON_INTERCEPTOR_READ_RANGE(ctx, delimiters,
+                                  REAL(strlen)(delimiters) + 1);
+    return REAL(strtok)(str, delimiters);
+  } else {
+    // However, when strict_string_checks is disabled we cannot check the
+    // whole string on the first call. Instead, we check the result string
+    // which is guaranteed to be a NULL-terminated substring of the first
+    // argument. We also conservatively check one character of str and the
+    // delimiters.
+    if (str != nullptr) {
+      COMMON_INTERCEPTOR_READ_STRING(ctx, str, 1);
+    }
+    COMMON_INTERCEPTOR_READ_RANGE(ctx, delimiters, 1);
+    char *result = REAL(strtok)(str, delimiters);
+    if (result != nullptr) {
+      COMMON_INTERCEPTOR_READ_RANGE(ctx, result, REAL(strlen)(result) + 1);
+    } else if (str != nullptr) {
+      // No delimiter were found, it's safe to assume that the entire str was
+      // scanned.
+      COMMON_INTERCEPTOR_READ_RANGE(ctx, str, REAL(strlen)(str) + 1);
+    }
+    return result;
+  }
+}
+
+#define INIT_STRTOK COMMON_INTERCEPT_FUNCTION(strtok)
+#else
+#define INIT_STRTOK
+#endif
+
 #if SANITIZER_INTERCEPT_MEMMEM
 DECLARE_WEAK_INTERCEPTOR_HOOK(__sanitizer_weak_hook_memmem, uptr called_pc,
                               const void *s1, SIZE_T len1, const void *s2,
@@ -531,10 +614,11 @@
     return internal_strchr(s, c);
   COMMON_INTERCEPTOR_ENTER(ctx, strchr, s, c);
   char *result = REAL(strchr)(s, c);
-  uptr len = internal_strlen(s);
-  uptr n = result ? result - s + 1 : len + 1;
-  if (common_flags()->intercept_strchr)
-    COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s, len, n);
+  if (common_flags()->intercept_strchr) {
+    // Keep strlen as macro argument, as macro may ignore it.
+    COMMON_INTERCEPTOR_READ_STRING(ctx, s,
+      (result ? result - s : REAL(strlen)(s)) + 1);
+  }
   return result;
 }
 #define INIT_STRCHR COMMON_INTERCEPT_FUNCTION(strchr)
@@ -563,9 +647,8 @@
   if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED)
     return internal_strrchr(s, c);
   COMMON_INTERCEPTOR_ENTER(ctx, strrchr, s, c);
-  uptr len = internal_strlen(s);
   if (common_flags()->intercept_strchr)
-    COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s, len, len + 1);
+    COMMON_INTERCEPTOR_READ_RANGE(ctx, s, REAL(strlen)(s) + 1);
   return REAL(strrchr)(s, c);
 }
 #define INIT_STRRCHR COMMON_INTERCEPT_FUNCTION(strrchr)
@@ -842,6 +925,23 @@
 #define INIT_READ
 #endif
 
+#if SANITIZER_INTERCEPT_FREAD
+INTERCEPTOR(SIZE_T, fread, void *ptr, SIZE_T size, SIZE_T nmemb, void *file) {
+  // libc file streams can call user-supplied functions, see fopencookie.
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, fread, ptr, size, nmemb, file);
+  // FIXME: under ASan the call below may write to freed memory and corrupt
+  // its metadata. See
+  // https://github.com/google/sanitizers/issues/321.
+  SIZE_T res = REAL(fread)(ptr, size, nmemb, file);
+  if (res > 0) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, res * size);
+  return res;
+}
+#define INIT_FREAD COMMON_INTERCEPT_FUNCTION(fread)
+#else
+#define INIT_FREAD
+#endif
+
 #if SANITIZER_INTERCEPT_PREAD
 INTERCEPTOR(SSIZE_T, pread, int fd, void *ptr, SIZE_T count, OFF_T offset) {
   void *ctx;
@@ -942,6 +1042,20 @@
 #define INIT_WRITE
 #endif
 
+#if SANITIZER_INTERCEPT_FWRITE
+INTERCEPTOR(SIZE_T, fwrite, const void *p, uptr size, uptr nmemb, void *file) {
+  // libc file streams can call user-supplied functions, see fopencookie.
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, fwrite, p, size, nmemb, file);
+  SIZE_T res = REAL(fwrite)(p, size, nmemb, file);
+  if (res > 0) COMMON_INTERCEPTOR_READ_RANGE(ctx, p, res * size);
+  return res;
+}
+#define INIT_FWRITE COMMON_INTERCEPT_FUNCTION(fwrite)
+#else
+#define INIT_FWRITE
+#endif
+
 #if SANITIZER_INTERCEPT_PWRITE
 INTERCEPTOR(SSIZE_T, pwrite, int fd, void *ptr, SIZE_T count, OFF_T offset) {
   void *ctx;
@@ -3251,6 +3365,30 @@
 #endif
 
 #if SANITIZER_INTERCEPT_STRERROR_R
+// There are 2 versions of strerror_r:
+//  * POSIX version returns 0 on success, negative error code on failure,
+//    writes message to buf.
+//  * GNU version returns message pointer, which points to either buf or some
+//    static storage.
+#if ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE) || \
+    SANITIZER_MAC || SANITIZER_ANDROID
+// POSIX version. Spec is not clear on whether buf is NULL-terminated.
+// At least on OSX, buf contents are valid even when the call fails.
+INTERCEPTOR(int, strerror_r, int errnum, char *buf, SIZE_T buflen) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, strerror_r, errnum, buf, buflen);
+  // FIXME: under ASan the call below may write to freed memory and corrupt
+  // its metadata. See
+  // https://github.com/google/sanitizers/issues/321.
+  int res = REAL(strerror_r)(errnum, buf, buflen);
+
+  SIZE_T sz = internal_strnlen(buf, buflen);
+  if (sz < buflen) ++sz;
+  COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, sz);
+  return res;
+}
+#else
+// GNU version.
 INTERCEPTOR(char *, strerror_r, int errnum, char *buf, SIZE_T buflen) {
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, strerror_r, errnum, buf, buflen);
@@ -3258,24 +3396,14 @@
   // its metadata. See
   // https://github.com/google/sanitizers/issues/321.
   char *res = REAL(strerror_r)(errnum, buf, buflen);
-  // There are 2 versions of strerror_r:
-  //  * POSIX version returns 0 on success, negative error code on failure,
-  //    writes message to buf.
-  //  * GNU version returns message pointer, which points to either buf or some
-  //    static storage.
-  SIZE_T posix_res = (SIZE_T)res;
-  if (posix_res < 1024 || posix_res > (SIZE_T) - 1024) {
-    // POSIX version. Spec is not clear on whether buf is NULL-terminated.
-    // At least on OSX, buf contents are valid even when the call fails.
-    SIZE_T sz = internal_strnlen(buf, buflen);
-    if (sz < buflen) ++sz;
-    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, sz);
-  } else {
-    // GNU version.
+  if (res == buf)
     COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, REAL(strlen)(res) + 1);
-  }
+  else
+    COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, REAL(strlen)(res) + 1);
   return res;
 }
+#endif //(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !_GNU_SOURCE ||
+       //SANITIZER_MAC
 #define INIT_STRERROR_R COMMON_INTERCEPT_FUNCTION(strerror_r);
 #else
 #define INIT_STRERROR_R
@@ -3414,7 +3542,8 @@
   // its metadata. See
   // https://github.com/google/sanitizers/issues/321.
   int res = REAL(getgroups)(size, lst);
-  if (res && lst) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, lst, res * sizeof(*lst));
+  if (res >= 0 && lst && size > 0)
+    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, lst, res * sizeof(*lst));
   return res;
 }
 #define INIT_GETGROUPS COMMON_INTERCEPT_FUNCTION(getgroups);
@@ -3669,11 +3798,12 @@
 INTERCEPTOR(int, pthread_mutex_lock, void *m) {
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, pthread_mutex_lock, m);
+  COMMON_INTERCEPTOR_MUTEX_PRE_LOCK(ctx, m);
   int res = REAL(pthread_mutex_lock)(m);
   if (res == errno_EOWNERDEAD)
     COMMON_INTERCEPTOR_MUTEX_REPAIR(ctx, m);
   if (res == 0 || res == errno_EOWNERDEAD)
-    COMMON_INTERCEPTOR_MUTEX_LOCK(ctx, m);
+    COMMON_INTERCEPTOR_MUTEX_POST_LOCK(ctx, m);
   if (res == errno_EINVAL)
     COMMON_INTERCEPTOR_MUTEX_INVALID(ctx, m);
   return res;
@@ -4547,7 +4677,7 @@
   // its metadata. See
   // https://github.com/google/sanitizers/issues/321.
   SIZE_T res = REAL(iconv)(cd, inbuf, inbytesleft, outbuf, outbytesleft);
-  if (res != (SIZE_T) - 1 && outbuf && *outbuf > outbuf_orig) {
+  if (outbuf && *outbuf > outbuf_orig) {
     SIZE_T sz = (char *)*outbuf - (char *)outbuf_orig;
     COMMON_INTERCEPTOR_WRITE_RANGE(ctx, outbuf_orig, sz);
   }
@@ -4614,11 +4744,15 @@
 //   descriptor offset as an argument instead of a pointer.  GOT address
 //   is passed in r12, so it's necessary to write it in assembly.  This is
 //   the function used by the compiler.
-#define INIT_TLS_GET_ADDR COMMON_INTERCEPT_FUNCTION(__tls_get_addr_internal)
+extern "C" uptr __tls_get_offset_wrapper(void *arg, uptr (*fn)(void *arg));
+#define INIT_TLS_GET_ADDR COMMON_INTERCEPT_FUNCTION(__tls_get_offset)
+DEFINE_REAL(uptr, __tls_get_offset, void *arg)
+extern "C" uptr __tls_get_offset(void *arg);
+extern "C" uptr __interceptor___tls_get_offset(void *arg);
 INTERCEPTOR(uptr, __tls_get_addr_internal, void *arg) {
   void *ctx;
   COMMON_INTERCEPTOR_ENTER(ctx, __tls_get_addr_internal, arg);
-  uptr res = REAL(__tls_get_addr_internal)(arg);
+  uptr res = __tls_get_offset_wrapper(arg, REAL(__tls_get_offset));
   uptr tp = reinterpret_cast<uptr>(__builtin_thread_pointer());
   void *ptr = reinterpret_cast<void *>(res + tp);
   uptr tls_begin, tls_end;
@@ -4630,32 +4764,43 @@
   }
   return res;
 }
-// We need a protected symbol aliasing the above, so that we can jump
+// We need a hidden symbol aliasing the above, so that we can jump
 // directly to it from the assembly below.
 extern "C" __attribute__((alias("__interceptor___tls_get_addr_internal"),
-                          visibility("protected")))
-uptr __interceptor___tls_get_addr_internal_protected(void *arg);
+                          visibility("hidden")))
+uptr __tls_get_addr_hidden(void *arg);
 // Now carefully intercept __tls_get_offset.
 asm(
   ".text\n"
-  ".global __tls_get_offset\n"
-  "__tls_get_offset:\n"
 // The __intercept_ version has to exist, so that gen_dynamic_list.py
 // exports our symbol.
+  ".weak __tls_get_offset\n"
+  ".type __tls_get_offset, @function\n"
+  "__tls_get_offset:\n"
   ".global __interceptor___tls_get_offset\n"
+  ".type __interceptor___tls_get_offset, @function\n"
   "__interceptor___tls_get_offset:\n"
 #ifdef __s390x__
   "la %r2, 0(%r2,%r12)\n"
-  "jg __interceptor___tls_get_addr_internal_protected\n"
+  "jg __tls_get_addr_hidden\n"
 #else
   "basr %r3,0\n"
   "0: la %r2,0(%r2,%r12)\n"
   "l %r4,1f-0b(%r3)\n"
   "b 0(%r4,%r3)\n"
-  "1: .long __interceptor___tls_get_addr_internal_protected - 0b\n"
+  "1: .long __tls_get_addr_hidden - 0b\n"
 #endif
-  ".type __tls_get_offset, @function\n"
-  ".size __tls_get_offset, .-__tls_get_offset\n"
+  ".size __interceptor___tls_get_offset, .-__interceptor___tls_get_offset\n"
+// Assembly wrapper to call REAL(__tls_get_offset)(arg)
+  ".type __tls_get_offset_wrapper, @function\n"
+  "__tls_get_offset_wrapper:\n"
+#ifdef __s390x__
+  "sgr %r2,%r12\n"
+#else
+  "sr %r2,%r12\n"
+#endif
+  "br %r3\n"
+  ".size __tls_get_offset_wrapper, .-__tls_get_offset_wrapper\n"
 );
 #endif // SANITIZER_S390
 #else
@@ -6026,6 +6171,86 @@
 #define INIT_UTMPX
 #endif
 
+#if SANITIZER_INTERCEPT_GETLOADAVG
+INTERCEPTOR(int, getloadavg, double *loadavg, int nelem) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, getloadavg, loadavg, nelem);
+  int res = REAL(getloadavg)(loadavg, nelem);
+  if (res > 0)
+    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, loadavg, res * sizeof(*loadavg));
+  return res;
+}
+#define INIT_GETLOADAVG                      \
+  COMMON_INTERCEPT_FUNCTION(getloadavg);
+#else
+#define INIT_GETLOADAVG
+#endif
+
+#if SANITIZER_INTERCEPT_MCHECK_MPROBE
+INTERCEPTOR(int, mcheck, void (*abortfunc)(int mstatus)) {
+  return 0;
+}
+
+INTERCEPTOR(int, mcheck_pedantic, void (*abortfunc)(int mstatus)) {
+  return 0;
+}
+
+INTERCEPTOR(int, mprobe, void *ptr) {
+  return 0;
+}
+#endif
+
+INTERCEPTOR(SIZE_T, wcslen, const wchar_t *s) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, wcslen, s);
+  SIZE_T res = REAL(wcslen)(s);
+  COMMON_INTERCEPTOR_READ_RANGE(ctx, s, sizeof(wchar_t) * (res + 1));
+  return res;
+}
+
+INTERCEPTOR(SIZE_T, wcsnlen, const wchar_t *s, SIZE_T n) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, wcsnlen, s, n);
+  SIZE_T res = REAL(wcsnlen)(s, n);
+  COMMON_INTERCEPTOR_READ_RANGE(ctx, s, sizeof(wchar_t) * Min(res + 1, n));
+  return res;
+}
+#define INIT_WCSLEN                  \
+  COMMON_INTERCEPT_FUNCTION(wcslen); \
+  COMMON_INTERCEPT_FUNCTION(wcsnlen);
+
+#if SANITIZER_INTERCEPT_WCSCAT
+INTERCEPTOR(wchar_t *, wcscat, wchar_t *dst, const wchar_t *src) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, wcscat, dst, src);
+  SIZE_T src_size = REAL(wcslen)(src);
+  SIZE_T dst_size = REAL(wcslen)(dst);
+  COMMON_INTERCEPTOR_READ_RANGE(ctx, src, (src_size + 1) * sizeof(wchar_t));
+  COMMON_INTERCEPTOR_READ_RANGE(ctx, dst, (dst_size + 1) * sizeof(wchar_t));
+  COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst + dst_size,
+                                 (src_size + 1) * sizeof(wchar_t));
+  return REAL(wcscat)(dst, src);  // NOLINT
+}
+
+INTERCEPTOR(wchar_t *, wcsncat, wchar_t *dst, const wchar_t *src, SIZE_T n) {
+  void *ctx;
+  COMMON_INTERCEPTOR_ENTER(ctx, wcsncat, dst, src, n);
+  SIZE_T src_size = REAL(wcsnlen)(src, n);
+  SIZE_T dst_size = REAL(wcslen)(dst);
+  COMMON_INTERCEPTOR_READ_RANGE(ctx, src,
+                                Min(src_size + 1, n) * sizeof(wchar_t));
+  COMMON_INTERCEPTOR_READ_RANGE(ctx, dst, (dst_size + 1) * sizeof(wchar_t));
+  COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dst + dst_size,
+                                 (src_size + 1) * sizeof(wchar_t));
+  return REAL(wcsncat)(dst, src, n);  // NOLINT
+}
+#define INIT_WCSCAT                  \
+  COMMON_INTERCEPT_FUNCTION(wcscat); \
+  COMMON_INTERCEPT_FUNCTION(wcsncat);
+#else
+#define INIT_WCSCAT
+#endif
+
 static void InitializeCommonInterceptors() {
   static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1];
   interceptor_metadata_map = new((void *)&metadata_mem) MetadataHashMap();
@@ -6033,6 +6258,8 @@
   INIT_TEXTDOMAIN;
   INIT_STRLEN;
   INIT_STRNLEN;
+  INIT_STRNDUP;
+  INIT___STRNDUP;
   INIT_STRCMP;
   INIT_STRNCMP;
   INIT_STRCASECMP;
@@ -6043,6 +6270,7 @@
   INIT_STRCHRNUL;
   INIT_STRRCHR;
   INIT_STRSPN;
+  INIT_STRTOK;
   INIT_STRPBRK;
   INIT_MEMSET;
   INIT_MEMMOVE;
@@ -6052,12 +6280,14 @@
   INIT_MEMRCHR;
   INIT_MEMMEM;
   INIT_READ;
+  INIT_FREAD;
   INIT_PREAD;
   INIT_PREAD64;
   INIT_READV;
   INIT_PREADV;
   INIT_PREADV64;
   INIT_WRITE;
+  INIT_FWRITE;
   INIT_PWRITE;
   INIT_PWRITE64;
   INIT_WRITEV;
@@ -6224,4 +6454,7 @@
   // FIXME: add other *stat interceptors.
   INIT_UTMP;
   INIT_UTMPX;
+  INIT_GETLOADAVG;
+  INIT_WCSLEN;
+  INIT_WCSCAT;
 }
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_format.inc b/lib/sanitizer_common/sanitizer_common_interceptors_format.inc
index 1256349..5ebe5a6 100644
--- a/lib/sanitizer_common/sanitizer_common_interceptors_format.inc
+++ b/lib/sanitizer_common/sanitizer_common_interceptors_format.inc
@@ -325,8 +325,8 @@
       continue;
     int size = scanf_get_value_size(&dir);
     if (size == FSS_INVALID) {
-      Report("WARNING: unexpected format specifier in scanf interceptor: "
-        "%.*s\n", dir.end - dir.begin, dir.begin);
+      Report("%s: WARNING: unexpected format specifier in scanf interceptor: ",
+             SanitizerToolName, "%.*s\n", dir.end - dir.begin, dir.begin);
       break;
     }
     void *argp = va_arg(aq, void *);
@@ -520,8 +520,12 @@
       continue;
     int size = printf_get_value_size(&dir);
     if (size == FSS_INVALID) {
-      Report("WARNING: unexpected format specifier in printf "
-             "interceptor: %.*s\n", dir.end - dir.begin, dir.begin);
+      static int ReportedOnce;
+      if (!ReportedOnce++)
+        Report(
+            "%s: WARNING: unexpected format specifier in printf "
+            "interceptor: %.*s (reported once per process)\n",
+            SanitizerToolName, dir.end - dir.begin, dir.begin);
       break;
     }
     if (dir.convSpecifier == 'n') {
diff --git a/lib/sanitizer_common/sanitizer_common_interface.inc b/lib/sanitizer_common/sanitizer_common_interface.inc
new file mode 100644
index 0000000..550427c
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_common_interface.inc
@@ -0,0 +1,39 @@
+//===-- sanitizer_common_interface.inc ------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// Sanitizer Common interface list.
+//===----------------------------------------------------------------------===//
+INTERFACE_FUNCTION(__sanitizer_annotate_contiguous_container)
+INTERFACE_FUNCTION(__sanitizer_contiguous_container_find_bad_address)
+INTERFACE_FUNCTION(__sanitizer_set_death_callback)
+INTERFACE_FUNCTION(__sanitizer_set_report_path)
+INTERFACE_FUNCTION(__sanitizer_set_report_fd)
+INTERFACE_FUNCTION(__sanitizer_verify_contiguous_container)
+INTERFACE_WEAK_FUNCTION(__sanitizer_report_error_summary)
+INTERFACE_WEAK_FUNCTION(__sanitizer_sandbox_on_notify)
+// Sanitizer weak hooks
+INTERFACE_WEAK_FUNCTION(__sanitizer_weak_hook_memcmp)
+INTERFACE_WEAK_FUNCTION(__sanitizer_weak_hook_strcmp)
+INTERFACE_WEAK_FUNCTION(__sanitizer_weak_hook_strncmp)
+INTERFACE_WEAK_FUNCTION(__sanitizer_weak_hook_strstr)
+// Stacktrace interface.
+INTERFACE_FUNCTION(__sanitizer_get_module_and_offset_for_pc)
+INTERFACE_FUNCTION(__sanitizer_symbolize_global)
+INTERFACE_FUNCTION(__sanitizer_symbolize_pc)
+// Allocator interface.
+INTERFACE_FUNCTION(__sanitizer_get_allocated_size)
+INTERFACE_FUNCTION(__sanitizer_get_current_allocated_bytes)
+INTERFACE_FUNCTION(__sanitizer_get_estimated_allocated_size)
+INTERFACE_FUNCTION(__sanitizer_get_free_bytes)
+INTERFACE_FUNCTION(__sanitizer_get_heap_size)
+INTERFACE_FUNCTION(__sanitizer_get_ownership)
+INTERFACE_FUNCTION(__sanitizer_get_unmapped_bytes)
+INTERFACE_FUNCTION(__sanitizer_install_malloc_and_free_hooks)
+INTERFACE_FUNCTION(__sanitizer_print_memory_profile)
+INTERFACE_WEAK_FUNCTION(__sanitizer_free_hook)
+INTERFACE_WEAK_FUNCTION(__sanitizer_malloc_hook)
diff --git a/lib/sanitizer_common/sanitizer_common_interface_posix.inc b/lib/sanitizer_common/sanitizer_common_interface_posix.inc
new file mode 100644
index 0000000..bbc725a
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_common_interface_posix.inc
@@ -0,0 +1,14 @@
+//===-- sanitizer_common_interface_posix.inc ------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// Sanitizer Common interface list only available for Posix systems.
+//===----------------------------------------------------------------------===//
+INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_code)
+INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_data)
+INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_demangle)
+INTERFACE_WEAK_FUNCTION(__sanitizer_symbolize_flush)
diff --git a/lib/sanitizer_common/sanitizer_common_libcdep.cc b/lib/sanitizer_common/sanitizer_common_libcdep.cc
index 3961aaf..cf20051 100644
--- a/lib/sanitizer_common/sanitizer_common_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_common_libcdep.cc
@@ -124,7 +124,7 @@
     if (heap_profile &&
         current_rss_mb > rss_during_last_reported_profile * 1.1) {
       Printf("\n\nHEAP PROFILE at RSS %zdMb\n", current_rss_mb);
-      __sanitizer_print_memory_profile(90);
+      __sanitizer_print_memory_profile(90, 20);
       rss_during_last_reported_profile = current_rss_mb;
     }
   }
@@ -163,8 +163,8 @@
 
 }  // namespace __sanitizer
 
-void NOINLINE
-__sanitizer_sandbox_on_notify(__sanitizer_sandbox_arguments *args) {
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_sandbox_on_notify,
+                             __sanitizer_sandbox_arguments *args) {
   __sanitizer::PrepareForSandboxing(args);
   if (__sanitizer::sandboxing_callback)
     __sanitizer::sandboxing_callback();
diff --git a/lib/sanitizer_common/sanitizer_coverage_interface.inc b/lib/sanitizer_common/sanitizer_coverage_interface.inc
new file mode 100644
index 0000000..d474900
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_coverage_interface.inc
@@ -0,0 +1,26 @@
+//===-- sanitizer_coverage_interface.inc ----------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// Sanitizer Coverage interface list.
+//===----------------------------------------------------------------------===//
+INTERFACE_FUNCTION(__sanitizer_cov_dump)
+INTERFACE_FUNCTION(__sanitizer_dump_coverage)
+INTERFACE_FUNCTION(__sanitizer_dump_trace_pc_guard_coverage)
+INTERFACE_WEAK_FUNCTION(__sancov_default_options)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_cmp)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_cmp1)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_cmp2)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_cmp4)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_cmp8)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_div4)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_div8)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_gep)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_pc_guard)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_pc_guard_init)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_pc_indir)
+INTERFACE_WEAK_FUNCTION(__sanitizer_cov_trace_switch)
diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
deleted file mode 100644
index a325b18..0000000
--- a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
+++ /dev/null
@@ -1,1048 +0,0 @@
-//===-- sanitizer_coverage.cc ---------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Sanitizer Coverage.
-// This file implements run-time support for a poor man's coverage tool.
-//
-// Compiler instrumentation:
-// For every interesting basic block the compiler injects the following code:
-// if (Guard < 0) {
-//    __sanitizer_cov(&Guard);
-// }
-// At the module start up time __sanitizer_cov_module_init sets the guards
-// to consecutive negative numbers (-1, -2, -3, ...).
-// It's fine to call __sanitizer_cov more than once for a given block.
-//
-// Run-time:
-//  - __sanitizer_cov(): record that we've executed the PC (GET_CALLER_PC).
-//    and atomically set Guard to -Guard.
-//  - __sanitizer_cov_dump: dump the coverage data to disk.
-//  For every module of the current process that has coverage data
-//  this will create a file module_name.PID.sancov.
-//
-// The file format is simple: the first 8 bytes is the magic,
-// one of 0xC0BFFFFFFFFFFF64 and 0xC0BFFFFFFFFFFF32. The last byte of the
-// magic defines the size of the following offsets.
-// The rest of the data is the offsets in the module.
-//
-// Eventually, this coverage implementation should be obsoleted by a more
-// powerful general purpose Clang/LLVM coverage instrumentation.
-// Consider this implementation as prototype.
-//
-// FIXME: support (or at least test with) dlclose.
-//===----------------------------------------------------------------------===//
-
-#include "sanitizer_allocator_internal.h"
-#include "sanitizer_common.h"
-#include "sanitizer_libc.h"
-#include "sanitizer_mutex.h"
-#include "sanitizer_procmaps.h"
-#include "sanitizer_stacktrace.h"
-#include "sanitizer_symbolizer.h"
-#include "sanitizer_flags.h"
-
-using namespace __sanitizer;
-
-static const u64 kMagic64 = 0xC0BFFFFFFFFFFF64ULL;
-static const u64 kMagic32 = 0xC0BFFFFFFFFFFF32ULL;
-static const uptr kNumWordsForMagic = SANITIZER_WORDSIZE == 64 ? 1 : 2;
-static const u64 kMagic = SANITIZER_WORDSIZE == 64 ? kMagic64 : kMagic32;
-
-static atomic_uint32_t dump_once_guard;  // Ensure that CovDump runs only once.
-
-static atomic_uintptr_t coverage_counter;
-static atomic_uintptr_t caller_callee_counter;
-
-static void ResetGlobalCounters() {
-  return atomic_store(&coverage_counter, 0, memory_order_relaxed);
-  return atomic_store(&caller_callee_counter, 0, memory_order_relaxed);
-}
-
-// pc_array is the array containing the covered PCs.
-// To make the pc_array thread- and async-signal-safe it has to be large enough.
-// 128M counters "ought to be enough for anybody" (4M on 32-bit).
-
-// With coverage_direct=1 in ASAN_OPTIONS, pc_array memory is mapped to a file.
-// In this mode, __sanitizer_cov_dump does nothing, and CovUpdateMapping()
-// dump current memory layout to another file.
-
-static bool cov_sandboxed = false;
-static fd_t cov_fd = kInvalidFd;
-static unsigned int cov_max_block_size = 0;
-static bool coverage_enabled = false;
-static const char *coverage_dir;
-
-namespace __sanitizer {
-
-class CoverageData {
- public:
-  void Init();
-  void Enable();
-  void Disable();
-  void ReInit();
-  void BeforeFork();
-  void AfterFork(int child_pid);
-  void Extend(uptr npcs);
-  void Add(uptr pc, u32 *guard);
-  void IndirCall(uptr caller, uptr callee, uptr callee_cache[],
-                 uptr cache_size);
-  void DumpCallerCalleePairs();
-  void DumpTrace();
-  void DumpAsBitSet();
-  void DumpCounters();
-  void DumpOffsets();
-  void DumpAll();
-
-  ALWAYS_INLINE
-  void TraceBasicBlock(u32 *id);
-
-  void InitializeGuardArray(s32 *guards);
-  void InitializeGuards(s32 *guards, uptr n, const char *module_name,
-                        uptr caller_pc);
-  void InitializeCounters(u8 *counters, uptr n);
-  void ReinitializeGuards();
-  uptr GetNumberOf8bitCounters();
-  uptr Update8bitCounterBitsetAndClearCounters(u8 *bitset);
-
-  uptr *data();
-  uptr size() const;
-
- private:
-  struct NamedPcRange {
-    const char *copied_module_name;
-    uptr beg, end; // elements [beg,end) in pc_array.
-  };
-
-  void DirectOpen();
-  void UpdateModuleNameVec(uptr caller_pc, uptr range_beg, uptr range_end);
-  void GetRangeOffsets(const NamedPcRange& r, Symbolizer* s,
-      InternalMmapVector<uptr>* offsets) const;
-
-  // Maximal size pc array may ever grow.
-  // We MmapNoReserve this space to ensure that the array is contiguous.
-  static const uptr kPcArrayMaxSize =
-      FIRST_32_SECOND_64(1 << (SANITIZER_ANDROID ? 24 : 26), 1 << 27);
-  // The amount file mapping for the pc array is grown by.
-  static const uptr kPcArrayMmapSize = 64 * 1024;
-
-  // pc_array is allocated with MmapNoReserveOrDie and so it uses only as
-  // much RAM as it really needs.
-  uptr *pc_array;
-  // Index of the first available pc_array slot.
-  atomic_uintptr_t pc_array_index;
-  // Array size.
-  atomic_uintptr_t pc_array_size;
-  // Current file mapped size of the pc array.
-  uptr pc_array_mapped_size;
-  // Descriptor of the file mapped pc array.
-  fd_t pc_fd;
-
-  // Vector of coverage guard arrays, protected by mu.
-  InternalMmapVectorNoCtor<s32*> guard_array_vec;
-
-  // Vector of module and compilation unit pc ranges.
-  InternalMmapVectorNoCtor<NamedPcRange> comp_unit_name_vec;
-  InternalMmapVectorNoCtor<NamedPcRange> module_name_vec;
-
-  struct CounterAndSize {
-    u8 *counters;
-    uptr n;
-  };
-
-  InternalMmapVectorNoCtor<CounterAndSize> counters_vec;
-  uptr num_8bit_counters;
-
-  // Caller-Callee (cc) array, size and current index.
-  static const uptr kCcArrayMaxSize = FIRST_32_SECOND_64(1 << 18, 1 << 24);
-  uptr **cc_array;
-  atomic_uintptr_t cc_array_index;
-  atomic_uintptr_t cc_array_size;
-
-  // Tracing event array, size and current pointer.
-  // We record all events (basic block entries) in a global buffer of u32
-  // values. Each such value is the index in pc_array.
-  // So far the tracing is highly experimental:
-  //   - not thread-safe;
-  //   - does not support long traces;
-  //   - not tuned for performance.
-  // Windows doesn't do overcommit (committed virtual memory costs swap), so
-  // programs can't reliably map such large amounts of virtual memory.
-  // TODO(etienneb): Find a way to support coverage of larger executable
-static const uptr kTrEventArrayMaxSize =
-    (SANITIZER_WORDSIZE == 32 || SANITIZER_WINDOWS) ? 1 << 22 : 1 << 30;
-  u32 *tr_event_array;
-  uptr tr_event_array_size;
-  u32 *tr_event_pointer;
-  static const uptr kTrPcArrayMaxSize    = FIRST_32_SECOND_64(1 << 22, 1 << 27);
-
-  StaticSpinMutex mu;
-};
-
-static CoverageData coverage_data;
-
-void CovUpdateMapping(const char *path, uptr caller_pc = 0);
-
-void CoverageData::DirectOpen() {
-  InternalScopedString path(kMaxPathLength);
-  internal_snprintf((char *)path.data(), path.size(), "%s/%zd.sancov.raw",
-                    coverage_dir, internal_getpid());
-  pc_fd = OpenFile(path.data(), RdWr);
-  if (pc_fd == kInvalidFd) {
-    Report("Coverage: failed to open %s for reading/writing\n", path.data());
-    Die();
-  }
-
-  pc_array_mapped_size = 0;
-  CovUpdateMapping(coverage_dir);
-}
-
-void CoverageData::Init() {
-  pc_fd = kInvalidFd;
-}
-
-void CoverageData::Enable() {
-  if (pc_array)
-    return;
-  pc_array = reinterpret_cast<uptr *>(
-      MmapNoReserveOrDie(sizeof(uptr) * kPcArrayMaxSize, "CovInit"));
-  atomic_store(&pc_array_index, 0, memory_order_relaxed);
-  if (common_flags()->coverage_direct) {
-    atomic_store(&pc_array_size, 0, memory_order_relaxed);
-  } else {
-    atomic_store(&pc_array_size, kPcArrayMaxSize, memory_order_relaxed);
-  }
-
-  cc_array = reinterpret_cast<uptr **>(MmapNoReserveOrDie(
-      sizeof(uptr *) * kCcArrayMaxSize, "CovInit::cc_array"));
-  atomic_store(&cc_array_size, kCcArrayMaxSize, memory_order_relaxed);
-  atomic_store(&cc_array_index, 0, memory_order_relaxed);
-
-  // Allocate tr_event_array with a guard page at the end.
-  tr_event_array = reinterpret_cast<u32 *>(MmapNoReserveOrDie(
-      sizeof(tr_event_array[0]) * kTrEventArrayMaxSize + GetMmapGranularity(),
-      "CovInit::tr_event_array"));
-  MprotectNoAccess(
-      reinterpret_cast<uptr>(&tr_event_array[kTrEventArrayMaxSize]),
-      GetMmapGranularity());
-  tr_event_array_size = kTrEventArrayMaxSize;
-  tr_event_pointer = tr_event_array;
-
-  num_8bit_counters = 0;
-}
-
-void CoverageData::InitializeGuardArray(s32 *guards) {
-  Enable();  // Make sure coverage is enabled at this point.
-  s32 n = guards[0];
-  for (s32 j = 1; j <= n; j++) {
-    uptr idx = atomic_load_relaxed(&pc_array_index);
-    atomic_store_relaxed(&pc_array_index, idx + 1);
-    guards[j] = -static_cast<s32>(idx + 1);
-  }
-}
-
-void CoverageData::Disable() {
-  if (pc_array) {
-    UnmapOrDie(pc_array, sizeof(uptr) * kPcArrayMaxSize);
-    pc_array = nullptr;
-  }
-  if (cc_array) {
-    UnmapOrDie(cc_array, sizeof(uptr *) * kCcArrayMaxSize);
-    cc_array = nullptr;
-  }
-  if (tr_event_array) {
-    UnmapOrDie(tr_event_array,
-               sizeof(tr_event_array[0]) * kTrEventArrayMaxSize +
-                   GetMmapGranularity());
-    tr_event_array = nullptr;
-    tr_event_pointer = nullptr;
-  }
-  if (pc_fd != kInvalidFd) {
-    CloseFile(pc_fd);
-    pc_fd = kInvalidFd;
-  }
-}
-
-void CoverageData::ReinitializeGuards() {
-  // Assuming single thread.
-  atomic_store(&pc_array_index, 0, memory_order_relaxed);
-  for (uptr i = 0; i < guard_array_vec.size(); i++)
-    InitializeGuardArray(guard_array_vec[i]);
-}
-
-void CoverageData::ReInit() {
-  Disable();
-  if (coverage_enabled) {
-    if (common_flags()->coverage_direct) {
-      // In memory-mapped mode we must extend the new file to the known array
-      // size.
-      uptr size = atomic_load(&pc_array_size, memory_order_relaxed);
-      uptr npcs = size / sizeof(uptr);
-      Enable();
-      if (size) Extend(npcs);
-      if (coverage_enabled) CovUpdateMapping(coverage_dir);
-    } else {
-      Enable();
-    }
-  }
-  // Re-initialize the guards.
-  // We are single-threaded now, no need to grab any lock.
-  CHECK_EQ(atomic_load(&pc_array_index, memory_order_relaxed), 0);
-  ReinitializeGuards();
-}
-
-void CoverageData::BeforeFork() {
-  mu.Lock();
-}
-
-void CoverageData::AfterFork(int child_pid) {
-  // We are single-threaded so it's OK to release the lock early.
-  mu.Unlock();
-  if (child_pid == 0) ReInit();
-}
-
-// Extend coverage PC array to fit additional npcs elements.
-void CoverageData::Extend(uptr npcs) {
-  if (!common_flags()->coverage_direct) return;
-  SpinMutexLock l(&mu);
-
-  uptr size = atomic_load(&pc_array_size, memory_order_relaxed);
-  size += npcs * sizeof(uptr);
-
-  if (coverage_enabled && size > pc_array_mapped_size) {
-    if (pc_fd == kInvalidFd) DirectOpen();
-    CHECK_NE(pc_fd, kInvalidFd);
-
-    uptr new_mapped_size = pc_array_mapped_size;
-    while (size > new_mapped_size) new_mapped_size += kPcArrayMmapSize;
-    CHECK_LE(new_mapped_size, sizeof(uptr) * kPcArrayMaxSize);
-
-    // Extend the file and map the new space at the end of pc_array.
-    uptr res = internal_ftruncate(pc_fd, new_mapped_size);
-    int err;
-    if (internal_iserror(res, &err)) {
-      Printf("failed to extend raw coverage file: %d\n", err);
-      Die();
-    }
-
-    uptr next_map_base = ((uptr)pc_array) + pc_array_mapped_size;
-    void *p = MapWritableFileToMemory((void *)next_map_base,
-                                      new_mapped_size - pc_array_mapped_size,
-                                      pc_fd, pc_array_mapped_size);
-    CHECK_EQ((uptr)p, next_map_base);
-    pc_array_mapped_size = new_mapped_size;
-  }
-
-  atomic_store(&pc_array_size, size, memory_order_release);
-}
-
-void CoverageData::InitializeCounters(u8 *counters, uptr n) {
-  if (!counters) return;
-  CHECK_EQ(reinterpret_cast<uptr>(counters) % 16, 0);
-  n = RoundUpTo(n, 16); // The compiler must ensure that counters is 16-aligned.
-  SpinMutexLock l(&mu);
-  counters_vec.push_back({counters, n});
-  num_8bit_counters += n;
-}
-
-void CoverageData::UpdateModuleNameVec(uptr caller_pc, uptr range_beg,
-                                       uptr range_end) {
-  auto sym = Symbolizer::GetOrInit();
-  if (!sym)
-    return;
-  const char *module_name = sym->GetModuleNameForPc(caller_pc);
-  if (!module_name) return;
-  if (module_name_vec.empty() ||
-      module_name_vec.back().copied_module_name != module_name)
-    module_name_vec.push_back({module_name, range_beg, range_end});
-  else
-    module_name_vec.back().end = range_end;
-}
-
-void CoverageData::InitializeGuards(s32 *guards, uptr n,
-                                    const char *comp_unit_name,
-                                    uptr caller_pc) {
-  // The array 'guards' has n+1 elements, we use the element zero
-  // to store 'n'.
-  CHECK_LT(n, 1 << 30);
-  guards[0] = static_cast<s32>(n);
-  InitializeGuardArray(guards);
-  SpinMutexLock l(&mu);
-  uptr range_end = atomic_load(&pc_array_index, memory_order_relaxed);
-  uptr range_beg = range_end - n;
-  comp_unit_name_vec.push_back({comp_unit_name, range_beg, range_end});
-  guard_array_vec.push_back(guards);
-  UpdateModuleNameVec(caller_pc, range_beg, range_end);
-}
-
-static const uptr kBundleCounterBits = 16;
-
-// When coverage_order_pcs==true and SANITIZER_WORDSIZE==64
-// we insert the global counter into the first 16 bits of the PC.
-uptr BundlePcAndCounter(uptr pc, uptr counter) {
-  if (SANITIZER_WORDSIZE != 64 || !common_flags()->coverage_order_pcs)
-    return pc;
-  static const uptr kMaxCounter = (1 << kBundleCounterBits) - 1;
-  if (counter > kMaxCounter)
-    counter = kMaxCounter;
-  CHECK_EQ(0, pc >> (SANITIZER_WORDSIZE - kBundleCounterBits));
-  return pc | (counter << (SANITIZER_WORDSIZE - kBundleCounterBits));
-}
-
-uptr UnbundlePc(uptr bundle) {
-  if (SANITIZER_WORDSIZE != 64 || !common_flags()->coverage_order_pcs)
-    return bundle;
-  return (bundle << kBundleCounterBits) >> kBundleCounterBits;
-}
-
-uptr UnbundleCounter(uptr bundle) {
-  if (SANITIZER_WORDSIZE != 64 || !common_flags()->coverage_order_pcs)
-    return 0;
-  return bundle >> (SANITIZER_WORDSIZE - kBundleCounterBits);
-}
-
-// If guard is negative, atomically set it to -guard and store the PC in
-// pc_array.
-void CoverageData::Add(uptr pc, u32 *guard) {
-  atomic_uint32_t *atomic_guard = reinterpret_cast<atomic_uint32_t*>(guard);
-  s32 guard_value = atomic_load(atomic_guard, memory_order_relaxed);
-  if (guard_value >= 0) return;
-
-  atomic_store(atomic_guard, -guard_value, memory_order_relaxed);
-  if (!pc_array) return;
-
-  uptr idx = -guard_value - 1;
-  if (idx >= atomic_load(&pc_array_index, memory_order_acquire))
-    return;  // May happen after fork when pc_array_index becomes 0.
-  CHECK_LT(idx * sizeof(uptr),
-           atomic_load(&pc_array_size, memory_order_acquire));
-  uptr counter = atomic_fetch_add(&coverage_counter, 1, memory_order_relaxed);
-  pc_array[idx] = BundlePcAndCounter(pc, counter);
-}
-
-// Registers a pair caller=>callee.
-// When a given caller is seen for the first time, the callee_cache is added
-// to the global array cc_array, callee_cache[0] is set to caller and
-// callee_cache[1] is set to cache_size.
-// Then we are trying to add callee to callee_cache [2,cache_size) if it is
-// not there yet.
-// If the cache is full we drop the callee (may want to fix this later).
-void CoverageData::IndirCall(uptr caller, uptr callee, uptr callee_cache[],
-                             uptr cache_size) {
-  if (!cc_array) return;
-  atomic_uintptr_t *atomic_callee_cache =
-      reinterpret_cast<atomic_uintptr_t *>(callee_cache);
-  uptr zero = 0;
-  if (atomic_compare_exchange_strong(&atomic_callee_cache[0], &zero, caller,
-                                     memory_order_seq_cst)) {
-    uptr idx = atomic_fetch_add(&cc_array_index, 1, memory_order_relaxed);
-    CHECK_LT(idx * sizeof(uptr),
-             atomic_load(&cc_array_size, memory_order_acquire));
-    callee_cache[1] = cache_size;
-    cc_array[idx] = callee_cache;
-  }
-  CHECK_EQ(atomic_load(&atomic_callee_cache[0], memory_order_relaxed), caller);
-  for (uptr i = 2; i < cache_size; i++) {
-    uptr was = 0;
-    if (atomic_compare_exchange_strong(&atomic_callee_cache[i], &was, callee,
-                                       memory_order_seq_cst)) {
-      atomic_fetch_add(&caller_callee_counter, 1, memory_order_relaxed);
-      return;
-    }
-    if (was == callee)  // Already have this callee.
-      return;
-  }
-}
-
-uptr CoverageData::GetNumberOf8bitCounters() {
-  return num_8bit_counters;
-}
-
-// Map every 8bit counter to a 8-bit bitset and clear the counter.
-uptr CoverageData::Update8bitCounterBitsetAndClearCounters(u8 *bitset) {
-  uptr num_new_bits = 0;
-  uptr cur = 0;
-  // For better speed we map 8 counters to 8 bytes of bitset at once.
-  static const uptr kBatchSize = 8;
-  CHECK_EQ(reinterpret_cast<uptr>(bitset) % kBatchSize, 0);
-  for (uptr i = 0, len = counters_vec.size(); i < len; i++) {
-    u8 *c = counters_vec[i].counters;
-    uptr n = counters_vec[i].n;
-    CHECK_EQ(n % 16, 0);
-    CHECK_EQ(cur % kBatchSize, 0);
-    CHECK_EQ(reinterpret_cast<uptr>(c) % kBatchSize, 0);
-    if (!bitset) {
-      internal_bzero_aligned16(c, n);
-      cur += n;
-      continue;
-    }
-    for (uptr j = 0; j < n; j += kBatchSize, cur += kBatchSize) {
-      CHECK_LT(cur, num_8bit_counters);
-      u64 *pc64 = reinterpret_cast<u64*>(c + j);
-      u64 *pb64 = reinterpret_cast<u64*>(bitset + cur);
-      u64 c64 = *pc64;
-      u64 old_bits_64 = *pb64;
-      u64 new_bits_64 = old_bits_64;
-      if (c64) {
-        *pc64 = 0;
-        for (uptr k = 0; k < kBatchSize; k++) {
-          u64 x = (c64 >> (8 * k)) & 0xff;
-          if (x) {
-            u64 bit = 0;
-            /**/ if (x >= 128) bit = 128;
-            else if (x >= 32) bit = 64;
-            else if (x >= 16) bit = 32;
-            else if (x >= 8) bit = 16;
-            else if (x >= 4) bit = 8;
-            else if (x >= 3) bit = 4;
-            else if (x >= 2) bit = 2;
-            else if (x >= 1) bit = 1;
-            u64 mask = bit << (8 * k);
-            if (!(new_bits_64 & mask)) {
-              num_new_bits++;
-              new_bits_64 |= mask;
-            }
-          }
-        }
-        *pb64 = new_bits_64;
-      }
-    }
-  }
-  CHECK_EQ(cur, num_8bit_counters);
-  return num_new_bits;
-}
-
-uptr *CoverageData::data() {
-  return pc_array;
-}
-
-uptr CoverageData::size() const {
-  return atomic_load(&pc_array_index, memory_order_relaxed);
-}
-
-// Block layout for packed file format: header, followed by module name (no
-// trailing zero), followed by data blob.
-struct CovHeader {
-  int pid;
-  unsigned int module_name_length;
-  unsigned int data_length;
-};
-
-static void CovWritePacked(int pid, const char *module, const void *blob,
-                           unsigned int blob_size) {
-  if (cov_fd == kInvalidFd) return;
-  unsigned module_name_length = internal_strlen(module);
-  CovHeader header = {pid, module_name_length, blob_size};
-
-  if (cov_max_block_size == 0) {
-    // Writing to a file. Just go ahead.
-    WriteToFile(cov_fd, &header, sizeof(header));
-    WriteToFile(cov_fd, module, module_name_length);
-    WriteToFile(cov_fd, blob, blob_size);
-  } else {
-    // Writing to a socket. We want to split the data into appropriately sized
-    // blocks.
-    InternalScopedBuffer<char> block(cov_max_block_size);
-    CHECK_EQ((uptr)block.data(), (uptr)(CovHeader *)block.data());
-    uptr header_size_with_module = sizeof(header) + module_name_length;
-    CHECK_LT(header_size_with_module, cov_max_block_size);
-    unsigned int max_payload_size =
-        cov_max_block_size - header_size_with_module;
-    char *block_pos = block.data();
-    internal_memcpy(block_pos, &header, sizeof(header));
-    block_pos += sizeof(header);
-    internal_memcpy(block_pos, module, module_name_length);
-    block_pos += module_name_length;
-    char *block_data_begin = block_pos;
-    const char *blob_pos = (const char *)blob;
-    while (blob_size > 0) {
-      unsigned int payload_size = Min(blob_size, max_payload_size);
-      blob_size -= payload_size;
-      internal_memcpy(block_data_begin, blob_pos, payload_size);
-      blob_pos += payload_size;
-      ((CovHeader *)block.data())->data_length = payload_size;
-      WriteToFile(cov_fd, block.data(), header_size_with_module + payload_size);
-    }
-  }
-}
-
-// If packed = false: <name>.<pid>.<sancov> (name = module name).
-// If packed = true and name == 0: <pid>.<sancov>.<packed>.
-// If packed = true and name != 0: <name>.<sancov>.<packed> (name is
-// user-supplied).
-static fd_t CovOpenFile(InternalScopedString *path, bool packed,
-                       const char *name, const char *extension = "sancov") {
-  path->clear();
-  if (!packed) {
-    CHECK(name);
-    path->append("%s/%s.%zd.%s", coverage_dir, name, internal_getpid(),
-                extension);
-  } else {
-    if (!name)
-      path->append("%s/%zd.%s.packed", coverage_dir, internal_getpid(),
-                  extension);
-    else
-      path->append("%s/%s.%s.packed", coverage_dir, name, extension);
-  }
-  error_t err;
-  fd_t fd = OpenFile(path->data(), WrOnly, &err);
-  if (fd == kInvalidFd)
-    Report("SanitizerCoverage: failed to open %s for writing (reason: %d)\n",
-           path->data(), err);
-  return fd;
-}
-
-// Dump trace PCs and trace events into two separate files.
-void CoverageData::DumpTrace() {
-  uptr max_idx = tr_event_pointer - tr_event_array;
-  if (!max_idx) return;
-  auto sym = Symbolizer::GetOrInit();
-  if (!sym)
-    return;
-  InternalScopedString out(32 << 20);
-  for (uptr i = 0, n = size(); i < n; i++) {
-    const char *module_name = "<unknown>";
-    uptr module_address = 0;
-    sym->GetModuleNameAndOffsetForPC(UnbundlePc(pc_array[i]), &module_name,
-                                     &module_address);
-    out.append("%s 0x%zx\n", module_name, module_address);
-  }
-  InternalScopedString path(kMaxPathLength);
-  fd_t fd = CovOpenFile(&path, false, "trace-points");
-  if (fd == kInvalidFd) return;
-  WriteToFile(fd, out.data(), out.length());
-  CloseFile(fd);
-
-  fd = CovOpenFile(&path, false, "trace-compunits");
-  if (fd == kInvalidFd) return;
-  out.clear();
-  for (uptr i = 0; i < comp_unit_name_vec.size(); i++)
-    out.append("%s\n", comp_unit_name_vec[i].copied_module_name);
-  WriteToFile(fd, out.data(), out.length());
-  CloseFile(fd);
-
-  fd = CovOpenFile(&path, false, "trace-events");
-  if (fd == kInvalidFd) return;
-  uptr bytes_to_write = max_idx * sizeof(tr_event_array[0]);
-  u8 *event_bytes = reinterpret_cast<u8*>(tr_event_array);
-  // The trace file could be huge, and may not be written with a single syscall.
-  while (bytes_to_write) {
-    uptr actually_written;
-    if (WriteToFile(fd, event_bytes, bytes_to_write, &actually_written) &&
-        actually_written <= bytes_to_write) {
-      bytes_to_write -= actually_written;
-      event_bytes += actually_written;
-    } else {
-      break;
-    }
-  }
-  CloseFile(fd);
-  VReport(1, " CovDump: Trace: %zd PCs written\n", size());
-  VReport(1, " CovDump: Trace: %zd Events written\n", max_idx);
-}
-
-// This function dumps the caller=>callee pairs into a file as a sequence of
-// lines like "module_name offset".
-void CoverageData::DumpCallerCalleePairs() {
-  uptr max_idx = atomic_load(&cc_array_index, memory_order_relaxed);
-  if (!max_idx) return;
-  auto sym = Symbolizer::GetOrInit();
-  if (!sym)
-    return;
-  InternalScopedString out(32 << 20);
-  uptr total = 0;
-  for (uptr i = 0; i < max_idx; i++) {
-    uptr *cc_cache = cc_array[i];
-    CHECK(cc_cache);
-    uptr caller = cc_cache[0];
-    uptr n_callees = cc_cache[1];
-    const char *caller_module_name = "<unknown>";
-    uptr caller_module_address = 0;
-    sym->GetModuleNameAndOffsetForPC(caller, &caller_module_name,
-                                     &caller_module_address);
-    for (uptr j = 2; j < n_callees; j++) {
-      uptr callee = cc_cache[j];
-      if (!callee) break;
-      total++;
-      const char *callee_module_name = "<unknown>";
-      uptr callee_module_address = 0;
-      sym->GetModuleNameAndOffsetForPC(callee, &callee_module_name,
-                                       &callee_module_address);
-      out.append("%s 0x%zx\n%s 0x%zx\n", caller_module_name,
-                 caller_module_address, callee_module_name,
-                 callee_module_address);
-    }
-  }
-  InternalScopedString path(kMaxPathLength);
-  fd_t fd = CovOpenFile(&path, false, "caller-callee");
-  if (fd == kInvalidFd) return;
-  WriteToFile(fd, out.data(), out.length());
-  CloseFile(fd);
-  VReport(1, " CovDump: %zd caller-callee pairs written\n", total);
-}
-
-// Record the current PC into the event buffer.
-// Every event is a u32 value (index in tr_pc_array_index) so we compute
-// it once and then cache in the provided 'cache' storage.
-//
-// This function will eventually be inlined by the compiler.
-void CoverageData::TraceBasicBlock(u32 *id) {
-  // Will trap here if
-  //  1. coverage is not enabled at run-time.
-  //  2. The array tr_event_array is full.
-  *tr_event_pointer = *id - 1;
-  tr_event_pointer++;
-}
-
-void CoverageData::DumpCounters() {
-  if (!common_flags()->coverage_counters) return;
-  uptr n = coverage_data.GetNumberOf8bitCounters();
-  if (!n) return;
-  InternalScopedBuffer<u8> bitset(n);
-  coverage_data.Update8bitCounterBitsetAndClearCounters(bitset.data());
-  InternalScopedString path(kMaxPathLength);
-
-  for (uptr m = 0; m < module_name_vec.size(); m++) {
-    auto r = module_name_vec[m];
-    CHECK(r.copied_module_name);
-    CHECK_LE(r.beg, r.end);
-    CHECK_LE(r.end, size());
-    const char *base_name = StripModuleName(r.copied_module_name);
-    fd_t fd =
-        CovOpenFile(&path, /* packed */ false, base_name, "counters-sancov");
-    if (fd == kInvalidFd) return;
-    WriteToFile(fd, bitset.data() + r.beg, r.end - r.beg);
-    CloseFile(fd);
-    VReport(1, " CovDump: %zd counters written for '%s'\n", r.end - r.beg,
-            base_name);
-  }
-}
-
-void CoverageData::DumpAsBitSet() {
-  if (!common_flags()->coverage_bitset) return;
-  if (!size()) return;
-  InternalScopedBuffer<char> out(size());
-  InternalScopedString path(kMaxPathLength);
-  for (uptr m = 0; m < module_name_vec.size(); m++) {
-    uptr n_set_bits = 0;
-    auto r = module_name_vec[m];
-    CHECK(r.copied_module_name);
-    CHECK_LE(r.beg, r.end);
-    CHECK_LE(r.end, size());
-    for (uptr i = r.beg; i < r.end; i++) {
-      uptr pc = UnbundlePc(pc_array[i]);
-      out[i] = pc ? '1' : '0';
-      if (pc)
-        n_set_bits++;
-    }
-    const char *base_name = StripModuleName(r.copied_module_name);
-    fd_t fd = CovOpenFile(&path, /* packed */false, base_name, "bitset-sancov");
-    if (fd == kInvalidFd) return;
-    WriteToFile(fd, out.data() + r.beg, r.end - r.beg);
-    CloseFile(fd);
-    VReport(1,
-            " CovDump: bitset of %zd bits written for '%s', %zd bits are set\n",
-            r.end - r.beg, base_name, n_set_bits);
-  }
-}
-
-
-void CoverageData::GetRangeOffsets(const NamedPcRange& r, Symbolizer* sym,
-    InternalMmapVector<uptr>* offsets) const {
-  offsets->clear();
-  for (uptr i = 0; i < kNumWordsForMagic; i++)
-    offsets->push_back(0);
-  CHECK(r.copied_module_name);
-  CHECK_LE(r.beg, r.end);
-  CHECK_LE(r.end, size());
-  for (uptr i = r.beg; i < r.end; i++) {
-    uptr pc = UnbundlePc(pc_array[i]);
-    uptr counter = UnbundleCounter(pc_array[i]);
-    if (!pc) continue; // Not visited.
-    uptr offset = 0;
-    sym->GetModuleNameAndOffsetForPC(pc, nullptr, &offset);
-    offsets->push_back(BundlePcAndCounter(offset, counter));
-  }
-
-  CHECK_GE(offsets->size(), kNumWordsForMagic);
-  SortArray(offsets->data(), offsets->size());
-  for (uptr i = 0; i < offsets->size(); i++)
-    (*offsets)[i] = UnbundlePc((*offsets)[i]);
-}
-
-static void GenerateHtmlReport(const InternalMmapVector<char *> &cov_files) {
-  if (!common_flags()->html_cov_report) {
-    return;
-  }
-  char *sancov_path = FindPathToBinary(common_flags()->sancov_path);
-  if (sancov_path == nullptr) {
-    return;
-  }
-
-  InternalMmapVector<char *> sancov_argv(cov_files.size() * 2 + 3);
-  sancov_argv.push_back(sancov_path);
-  sancov_argv.push_back(internal_strdup("-html-report"));
-  auto argv_deleter = at_scope_exit([&] {
-    for (uptr i = 0; i < sancov_argv.size(); ++i) {
-      InternalFree(sancov_argv[i]);
-    }
-  });
-
-  for (const auto &cov_file : cov_files) {
-    sancov_argv.push_back(internal_strdup(cov_file));
-  }
-
-  {
-    ListOfModules modules;
-    modules.init();
-    for (const LoadedModule &module : modules) {
-      sancov_argv.push_back(internal_strdup(module.full_name()));
-    }
-  }
-
-  InternalScopedString report_path(kMaxPathLength);
-  fd_t report_fd =
-      CovOpenFile(&report_path, false /* packed */, GetProcessName(), "html");
-  int pid = StartSubprocess(sancov_argv[0], sancov_argv.data(),
-                            kInvalidFd /* stdin */, report_fd /* std_out */);
-  if (pid > 0) {
-    int result = WaitForProcess(pid);
-    if (result == 0)
-      Printf("coverage report generated to %s\n", report_path.data());
-  }
-}
-
-void CoverageData::DumpOffsets() {
-  auto sym = Symbolizer::GetOrInit();
-  if (!common_flags()->coverage_pcs) return;
-  CHECK_NE(sym, nullptr);
-  InternalMmapVector<uptr> offsets(0);
-  InternalScopedString path(kMaxPathLength);
-
-  InternalMmapVector<char *> cov_files(module_name_vec.size());
-  auto cov_files_deleter = at_scope_exit([&] {
-    for (uptr i = 0; i < cov_files.size(); ++i) {
-      InternalFree(cov_files[i]);
-    }
-  });
-
-  for (uptr m = 0; m < module_name_vec.size(); m++) {
-    auto r = module_name_vec[m];
-    GetRangeOffsets(r, sym, &offsets);
-
-    uptr num_offsets = offsets.size() - kNumWordsForMagic;
-    u64 *magic_p = reinterpret_cast<u64*>(offsets.data());
-    CHECK_EQ(*magic_p, 0ULL);
-    // FIXME: we may want to write 32-bit offsets even in 64-mode
-    // if all the offsets are small enough.
-    *magic_p = kMagic;
-
-    const char *module_name = StripModuleName(r.copied_module_name);
-    if (cov_sandboxed) {
-      if (cov_fd != kInvalidFd) {
-        CovWritePacked(internal_getpid(), module_name, offsets.data(),
-                       offsets.size() * sizeof(offsets[0]));
-        VReport(1, " CovDump: %zd PCs written to packed file\n", num_offsets);
-      }
-    } else {
-      // One file per module per process.
-      fd_t fd = CovOpenFile(&path, false /* packed */, module_name);
-      if (fd == kInvalidFd) continue;
-      WriteToFile(fd, offsets.data(), offsets.size() * sizeof(offsets[0]));
-      CloseFile(fd);
-      cov_files.push_back(internal_strdup(path.data()));
-      VReport(1, " CovDump: %s: %zd PCs written\n", path.data(), num_offsets);
-    }
-  }
-  if (cov_fd != kInvalidFd)
-    CloseFile(cov_fd);
-
-  GenerateHtmlReport(cov_files);
-}
-
-void CoverageData::DumpAll() {
-  if (!coverage_enabled || common_flags()->coverage_direct) return;
-  if (atomic_fetch_add(&dump_once_guard, 1, memory_order_relaxed))
-    return;
-  DumpAsBitSet();
-  DumpCounters();
-  DumpTrace();
-  DumpOffsets();
-  DumpCallerCalleePairs();
-}
-
-void CovPrepareForSandboxing(__sanitizer_sandbox_arguments *args) {
-  if (!args) return;
-  if (!coverage_enabled) return;
-  cov_sandboxed = args->coverage_sandboxed;
-  if (!cov_sandboxed) return;
-  cov_max_block_size = args->coverage_max_block_size;
-  if (args->coverage_fd >= 0) {
-    cov_fd = (fd_t)args->coverage_fd;
-  } else {
-    InternalScopedString path(kMaxPathLength);
-    // Pre-open the file now. The sandbox won't allow us to do it later.
-    cov_fd = CovOpenFile(&path, true /* packed */, nullptr);
-  }
-}
-
-fd_t MaybeOpenCovFile(const char *name) {
-  CHECK(name);
-  if (!coverage_enabled) return kInvalidFd;
-  InternalScopedString path(kMaxPathLength);
-  return CovOpenFile(&path, true /* packed */, name);
-}
-
-void CovBeforeFork() {
-  coverage_data.BeforeFork();
-}
-
-void CovAfterFork(int child_pid) {
-  coverage_data.AfterFork(child_pid);
-}
-
-static void MaybeDumpCoverage() {
-  if (common_flags()->coverage)
-    __sanitizer_cov_dump();
-}
-
-void InitializeCoverage(bool enabled, const char *dir) {
-  if (coverage_enabled)
-    return;  // May happen if two sanitizer enable coverage in the same process.
-  coverage_enabled = enabled;
-  coverage_dir = dir;
-  coverage_data.Init();
-  if (enabled) coverage_data.Enable();
-  if (!common_flags()->coverage_direct) Atexit(__sanitizer_cov_dump);
-  AddDieCallback(MaybeDumpCoverage);
-}
-
-void ReInitializeCoverage(bool enabled, const char *dir) {
-  coverage_enabled = enabled;
-  coverage_dir = dir;
-  coverage_data.ReInit();
-}
-
-void CoverageUpdateMapping() {
-  if (coverage_enabled)
-    CovUpdateMapping(coverage_dir);
-}
-
-} // namespace __sanitizer
-
-extern "C" {
-SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(u32 *guard) {
-  coverage_data.Add(StackTrace::GetPreviousInstructionPc(GET_CALLER_PC()),
-                    guard);
-}
-SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_with_check(u32 *guard) {
-  atomic_uint32_t *atomic_guard = reinterpret_cast<atomic_uint32_t*>(guard);
-  if (static_cast<s32>(
-          __sanitizer::atomic_load(atomic_guard, memory_order_relaxed)) < 0)
-    __sanitizer_cov(guard);
-}
-SANITIZER_INTERFACE_ATTRIBUTE void
-__sanitizer_cov_indir_call16(uptr callee, uptr callee_cache16[]) {
-  coverage_data.IndirCall(StackTrace::GetPreviousInstructionPc(GET_CALLER_PC()),
-                          callee, callee_cache16, 16);
-}
-SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_init() {
-  coverage_enabled = true;
-  coverage_dir = common_flags()->coverage_dir;
-  coverage_data.Init();
-}
-SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump() {
-  coverage_data.DumpAll();
-#if SANITIZER_LINUX
-  __sanitizer_dump_trace_pc_guard_coverage();
-#endif
-}
-SANITIZER_INTERFACE_ATTRIBUTE void
-__sanitizer_cov_module_init(s32 *guards, uptr npcs, u8 *counters,
-                            const char *comp_unit_name) {
-  coverage_data.InitializeGuards(guards, npcs, comp_unit_name, GET_CALLER_PC());
-  coverage_data.InitializeCounters(counters, npcs);
-  if (!common_flags()->coverage_direct) return;
-  if (SANITIZER_ANDROID && coverage_enabled) {
-    // dlopen/dlclose interceptors do not work on Android, so we rely on
-    // Extend() calls to update .sancov.map.
-    CovUpdateMapping(coverage_dir, GET_CALLER_PC());
-  }
-  coverage_data.Extend(npcs);
-}
-SANITIZER_INTERFACE_ATTRIBUTE
-sptr __sanitizer_maybe_open_cov_file(const char *name) {
-  return (sptr)MaybeOpenCovFile(name);
-}
-SANITIZER_INTERFACE_ATTRIBUTE
-uptr __sanitizer_get_total_unique_coverage() {
-  return atomic_load(&coverage_counter, memory_order_relaxed);
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-uptr __sanitizer_get_total_unique_caller_callee_pairs() {
-  return atomic_load(&caller_callee_counter, memory_order_relaxed);
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-void __sanitizer_cov_trace_func_enter(u32 *id) {
-  __sanitizer_cov_with_check(id);
-  coverage_data.TraceBasicBlock(id);
-}
-SANITIZER_INTERFACE_ATTRIBUTE
-void __sanitizer_cov_trace_basic_block(u32 *id) {
-  __sanitizer_cov_with_check(id);
-  coverage_data.TraceBasicBlock(id);
-}
-SANITIZER_INTERFACE_ATTRIBUTE
-void __sanitizer_reset_coverage() {
-  ResetGlobalCounters();
-  coverage_data.ReinitializeGuards();
-  internal_bzero_aligned16(
-      coverage_data.data(),
-      RoundUpTo(coverage_data.size() * sizeof(coverage_data.data()[0]), 16));
-}
-SANITIZER_INTERFACE_ATTRIBUTE
-uptr __sanitizer_get_coverage_guards(uptr **data) {
-  *data = coverage_data.data();
-  return coverage_data.size();
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-uptr __sanitizer_get_number_of_counters() {
-  return coverage_data.GetNumberOf8bitCounters();
-}
-
-SANITIZER_INTERFACE_ATTRIBUTE
-uptr __sanitizer_update_counter_bitset_and_clear_counters(u8 *bitset) {
-  return coverage_data.Update8bitCounterBitsetAndClearCounters(bitset);
-}
-// Default empty implementations (weak). Users should redefine them.
-#if !SANITIZER_WINDOWS  // weak does not work on Windows.
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_cmp() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_cmp1() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_cmp2() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_cmp4() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_cmp8() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_switch() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_div4() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_div8() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_gep() {}
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void __sanitizer_cov_trace_pc_indir() {}
-#endif  // !SANITIZER_WINDOWS
-} // extern "C"
diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc b/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc
index df6d10f..2443335 100644
--- a/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc
+++ b/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc
@@ -49,7 +49,7 @@
   WriteToFile(fd, &Magic, sizeof(Magic));
   WriteToFile(fd, pcs, len * sizeof(*pcs));
   CloseFile(fd);
-  Printf("SanitizerCoverage: %s %zd PCs written\n", file_path, len);
+  Printf("SanitizerCoverage: %s: %zd PCs written\n", file_path, len);
 }
 
 static void SanitizerDumpCoverage(const uptr* unsorted_pcs, uptr len) {
@@ -71,7 +71,7 @@
     if (!pc) continue;
 
     if (!__sanitizer_get_module_and_offset_for_pc(pc, nullptr, 0, &pcs[i])) {
-      Printf("ERROR: bad pc %x\n", pc);
+      Printf("ERROR: unknown pc 0x%x (may happen if dlclose is used)\n", pc);
       continue;
     }
     uptr module_base = pc - pcs[i];
@@ -98,10 +98,6 @@
   InternalFree(file_path);
   InternalFree(module_name);
   InternalFree(pcs);
-
-  if (sancov_flags()->symbolize) {
-    Printf("TODO(aizatsky): call sancov to symbolize\n");
-  }
 }
 
 // Collects trace-pc guard coverage.
@@ -150,20 +146,30 @@
 }  // namespace
 }  // namespace __sancov
 
+namespace __sanitizer {
+void InitializeCoverage(bool enabled, const char *dir) {
+  static bool coverage_enabled = false;
+  if (coverage_enabled)
+    return;  // May happen if two sanitizer enable coverage in the same process.
+  coverage_enabled = enabled;
+  Atexit(__sanitizer_cov_dump);
+  AddDieCallback(__sanitizer_cov_dump);
+}
+} // namespace __sanitizer
+
 extern "C" {
 SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_coverage(  // NOLINT
     const uptr* pcs, uptr len) {
   return __sancov::SanitizerDumpCoverage(pcs, len);
 }
 
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
-__sanitizer_cov_trace_pc_guard(u32* guard) {
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_pc_guard, u32* guard) {
   if (!*guard) return;
   __sancov::pc_guard_controller.TracePcGuard(guard, GET_CALLER_PC() - 1);
 }
 
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
-__sanitizer_cov_trace_pc_guard_init(u32* start, u32* end) {
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_pc_guard_init,
+                             u32* start, u32* end) {
   if (start == end || *start) return;
   __sancov::pc_guard_controller.InitTracePcGuard(start, end);
 }
@@ -171,4 +177,18 @@
 SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_dump_trace_pc_guard_coverage() {
   __sancov::pc_guard_controller.Dump();
 }
+SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump() {
+  __sanitizer_dump_trace_pc_guard_coverage();
+}
+// Default empty implementations (weak). Users should redefine them.
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp1, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp2, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp4, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp8, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_switch, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_div4, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_div8, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_gep, void) {}
+SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_pc_indir, void) {}
 }  // extern "C"
diff --git a/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc b/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
deleted file mode 100644
index 3477b06..0000000
--- a/lib/sanitizer_common/sanitizer_coverage_mapping_libcdep.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-//===-- sanitizer_coverage_mapping.cc -------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Mmap-based implementation of sanitizer coverage.
-//
-// This is part of the implementation of code coverage that does not require
-// __sanitizer_cov_dump() call. Data is stored in 2 files per process.
-//
-// $pid.sancov.map describes process memory layout in the following text-based
-// format:
-// <pointer size in bits>  // 1 line, 32 or 64
-// <mapping start> <mapping end> <base address> <dso name> // repeated
-// ...
-// Mapping lines are NOT sorted. This file is updated every time memory layout
-// is changed (i.e. in dlopen() and dlclose() interceptors).
-//
-// $pid.sancov.raw is a binary dump of PC values, sizeof(uptr) each. Again, not
-// sorted. This file is extended by 64Kb at a time and mapped into memory. It
-// contains one or more 0 words at the end, up to the next 64Kb aligned offset.
-//
-// To convert these 2 files to the usual .sancov format, run sancov.py rawunpack
-// $pid.sancov.raw.
-//
-//===----------------------------------------------------------------------===//
-
-#include "sanitizer_allocator_internal.h"
-#include "sanitizer_libc.h"
-#include "sanitizer_procmaps.h"
-
-namespace __sanitizer {
-
-static const uptr kMaxTextSize = 64 * 1024;
-
-struct CachedMapping {
- public:
-  bool NeedsUpdate(uptr pc) {
-    int new_pid = internal_getpid();
-    if (last_pid == new_pid && pc && pc >= last_range_start &&
-        pc < last_range_end)
-      return false;
-    last_pid = new_pid;
-    return true;
-  }
-
-  void SetModuleRange(uptr start, uptr end) {
-    last_range_start = start;
-    last_range_end = end;
-  }
-
- private:
-  uptr last_range_start, last_range_end;
-  int last_pid;
-};
-
-static CachedMapping cached_mapping;
-static StaticSpinMutex mapping_mu;
-
-void CovUpdateMapping(const char *coverage_dir, uptr caller_pc) {
-  if (!common_flags()->coverage_direct) return;
-
-  SpinMutexLock l(&mapping_mu);
-
-  if (!cached_mapping.NeedsUpdate(caller_pc))
-    return;
-
-  InternalScopedString text(kMaxTextSize);
-
-  {
-    text.append("%d\n", sizeof(uptr) * 8);
-    ListOfModules modules;
-    modules.init();
-    for (const LoadedModule &module : modules) {
-      const char *module_name = StripModuleName(module.full_name());
-      uptr base = module.base_address();
-      for (const auto &range : module.ranges()) {
-        if (range.executable) {
-          uptr start = range.beg;
-          uptr end = range.end;
-          text.append("%zx %zx %zx %s\n", start, end, base, module_name);
-          if (caller_pc && caller_pc >= start && caller_pc < end)
-            cached_mapping.SetModuleRange(start, end);
-        }
-      }
-    }
-  }
-
-  error_t err;
-  InternalScopedString tmp_path(64 + internal_strlen(coverage_dir));
-  uptr res = internal_snprintf((char *)tmp_path.data(), tmp_path.size(),
-                               "%s/%zd.sancov.map.tmp", coverage_dir,
-                               internal_getpid());
-  CHECK_LE(res, tmp_path.size());
-  fd_t map_fd = OpenFile(tmp_path.data(), WrOnly, &err);
-  if (map_fd == kInvalidFd) {
-    Report("Coverage: failed to open %s for writing: %d\n", tmp_path.data(),
-           err);
-    Die();
-  }
-
-  if (!WriteToFile(map_fd, text.data(), text.length(), nullptr, &err)) {
-    Printf("sancov.map write failed: %d\n", err);
-    Die();
-  }
-  CloseFile(map_fd);
-
-  InternalScopedString path(64 + internal_strlen(coverage_dir));
-  res = internal_snprintf((char *)path.data(), path.size(), "%s/%zd.sancov.map",
-                          coverage_dir, internal_getpid());
-  CHECK_LE(res, path.size());
-  if (!RenameFile(tmp_path.data(), path.data(), &err)) {
-    Printf("sancov.map rename failed: %d\n", err);
-    Die();
-  }
-}
-
-} // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_coverage_win_dll_thunk.cc b/lib/sanitizer_common/sanitizer_coverage_win_dll_thunk.cc
new file mode 100644
index 0000000..d5e459f
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_coverage_win_dll_thunk.cc
@@ -0,0 +1,21 @@
+//===-- sanitizer_coverage_win_dll_thunk.cc -------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines a family of thunks that should be statically linked into
+// the DLLs that have instrumentation in order to delegate the calls to the
+// shared runtime that lives in the main binary.
+// See https://github.com/google/sanitizers/issues/209 for the details.
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DLL_THUNK
+#include "sanitizer_win_dll_thunk.h"
+// Sanitizer Coverage interface functions.
+#define INTERFACE_FUNCTION(Name) INTERCEPT_SANITIZER_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "sanitizer_coverage_interface.inc"
+#endif // SANITIZER_DLL_THUNK
diff --git a/lib/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cc b/lib/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cc
new file mode 100644
index 0000000..988a206
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_coverage_win_dynamic_runtime_thunk.cc
@@ -0,0 +1,21 @@
+//===-- sanitizer_coverage_win_dynamic_runtime_thunk.cc -------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines things that need to be present in the application modules
+// to interact with Sanitizer Coverage, when it is included in a dll.
+//
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DYNAMIC_RUNTIME_THUNK
+#define SANITIZER_IMPORT_INTERFACE 1
+#include "sanitizer_win_defs.h"
+// Define weak alias for all weak functions imported from sanitizer coverage.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) WIN_WEAK_IMPORT_DEF(Name)
+#include "sanitizer_coverage_interface.inc"
+#endif // SANITIZER_DYNAMIC_RUNTIME_THUNK
diff --git a/lib/sanitizer_common/sanitizer_coverage_win_sections.cc b/lib/sanitizer_common/sanitizer_coverage_win_sections.cc
new file mode 100644
index 0000000..4b0bbf1
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_coverage_win_sections.cc
@@ -0,0 +1,22 @@
+//===-- sanitizer_coverage_win_sections.cc --------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines delimiters for Sanitizer Coverage's section.
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_platform.h"
+#if SANITIZER_WINDOWS
+#include <stdint.h>
+#pragma section(".SCOV$A", read, write)  // NOLINT
+#pragma section(".SCOV$Z", read, write)  // NOLINT
+extern "C" {
+__declspec(allocate(".SCOV$A")) uint32_t __start___sancov_guards = 0;
+__declspec(allocate(".SCOV$Z")) uint32_t __stop___sancov_guards = 0;
+}
+#endif // SANITIZER_WINDOWS
diff --git a/lib/sanitizer_common/sanitizer_coverage_win_weak_interception.cc b/lib/sanitizer_common/sanitizer_coverage_win_weak_interception.cc
new file mode 100644
index 0000000..0926f46
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_coverage_win_weak_interception.cc
@@ -0,0 +1,24 @@
+//===-- sanitizer_coverage_win_weak_interception.cc -----------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This module should be included in Sanitizer Coverage when it implemented as a
+// shared library on Windows (dll), in order to delegate the calls of weak
+// functions to the implementation in the main executable when a strong
+// definition is provided.
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DYNAMIC
+#include "sanitizer_win_weak_interception.h"
+#include "sanitizer_interface_internal.h"
+#include "sancov_flags.h"
+// Check if strong definitions for weak functions are present in the main
+// executable. If that is the case, override dll functions to point to strong
+// implementations.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "sanitizer_coverage_interface.inc"
+#endif // SANITIZER_DYNAMIC
diff --git a/lib/sanitizer_common/sanitizer_errno.cc b/lib/sanitizer_common/sanitizer_errno.cc
new file mode 100644
index 0000000..a6f9fc6
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_errno.cc
@@ -0,0 +1,35 @@
+//===-- sanitizer_errno.cc --------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is shared between sanitizers run-time libraries.
+//
+// Defines errno to avoid including errno.h and its dependencies into other
+// files (e.g. interceptors are not supposed to include any system headers).
+//
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_errno_codes.h"
+#include "sanitizer_internal_defs.h"
+
+#include <errno.h>
+
+namespace __sanitizer {
+
+COMPILER_CHECK(errno_ENOMEM == ENOMEM);
+COMPILER_CHECK(errno_EBUSY == EBUSY);
+COMPILER_CHECK(errno_EINVAL == EINVAL);
+
+// EOWNERDEAD is not present in some older platforms.
+#if defined(EOWNERDEAD)
+extern const int errno_EOWNERDEAD = EOWNERDEAD;
+#else
+extern const int errno_EOWNERDEAD = -1;
+#endif
+
+}  // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_errno.h b/lib/sanitizer_common/sanitizer_errno.h
new file mode 100644
index 0000000..7872b89
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_errno.h
@@ -0,0 +1,37 @@
+//===-- sanitizer_errno.h ---------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is shared between sanitizers run-time libraries.
+//
+// Defines errno to avoid including errno.h and its dependencies into sensitive
+// files (e.g. interceptors are not supposed to include any system headers).
+// It's ok to use errno.h directly when your file already depend on other system
+// includes though.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SANITIZER_ERRNO_H
+#define SANITIZER_ERRNO_H
+
+#include "sanitizer_errno_codes.h"
+#include "sanitizer_platform.h"
+
+#if SANITIZER_FREEBSD || SANITIZER_MAC
+#  define __errno_location __error
+#elif SANITIZER_ANDROID
+#  define __errno_location __errno
+#elif SANITIZER_WINDOWS
+#  define __errno_location _errno
+#endif
+
+extern "C" int *__errno_location();
+
+#define errno (*__errno_location())
+
+#endif  // SANITIZER_ERRNO_H
diff --git a/lib/sanitizer_common/sanitizer_errno_codes.h b/lib/sanitizer_common/sanitizer_errno_codes.h
new file mode 100644
index 0000000..dba774c
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_errno_codes.h
@@ -0,0 +1,34 @@
+//===-- sanitizer_errno_codes.h ---------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is shared between sanitizers run-time libraries.
+//
+// Defines errno codes to avoid including errno.h and its dependencies into
+// sensitive files (e.g. interceptors are not supposed to include any system
+// headers).
+// It's ok to use errno.h directly when your file already depend on other system
+// includes though.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SANITIZER_ERRNO_CODES_H
+#define SANITIZER_ERRNO_CODES_H
+
+namespace __sanitizer {
+
+#define errno_ENOMEM 12
+#define errno_EBUSY 16
+#define errno_EINVAL 22
+
+// Those might not present or their value differ on different platforms.
+extern const int errno_EOWNERDEAD;
+
+}  // namespace __sanitizer
+
+#endif  // SANITIZER_ERRNO_CODES_H
diff --git a/lib/sanitizer_common/sanitizer_flag_parser.h b/lib/sanitizer_common/sanitizer_flag_parser.h
index 2477aed..4988fbb 100644
--- a/lib/sanitizer_common/sanitizer_flag_parser.h
+++ b/lib/sanitizer_common/sanitizer_flag_parser.h
@@ -34,25 +34,46 @@
   bool Parse(const char *value) final;
 };
 
-template <>
-inline bool FlagHandler<bool>::Parse(const char *value) {
+inline bool ParseBool(const char *value, bool *b) {
   if (internal_strcmp(value, "0") == 0 ||
       internal_strcmp(value, "no") == 0 ||
       internal_strcmp(value, "false") == 0) {
-    *t_ = false;
+    *b = false;
     return true;
   }
   if (internal_strcmp(value, "1") == 0 ||
       internal_strcmp(value, "yes") == 0 ||
       internal_strcmp(value, "true") == 0) {
-    *t_ = true;
+    *b = true;
     return true;
   }
+  return false;
+}
+
+template <>
+inline bool FlagHandler<bool>::Parse(const char *value) {
+  if (ParseBool(value, t_)) return true;
   Printf("ERROR: Invalid value for bool option: '%s'\n", value);
   return false;
 }
 
 template <>
+inline bool FlagHandler<HandleSignalMode>::Parse(const char *value) {
+  bool b;
+  if (ParseBool(value, &b)) {
+    *t_ = b ? kHandleSignalYes : kHandleSignalNo;
+    return true;
+  }
+  if (internal_strcmp(value, "2") == 0 ||
+      internal_strcmp(value, "exclusive") == 0) {
+    *t_ = kHandleSignalExclusive;
+    return true;
+  }
+  Printf("ERROR: Invalid value for signal handler option: '%s'\n", value);
+  return false;
+}
+
+template <>
 inline bool FlagHandler<const char *>::Parse(const char *value) {
   *t_ = internal_strdup(value);
   return true;
diff --git a/lib/sanitizer_common/sanitizer_flags.h b/lib/sanitizer_common/sanitizer_flags.h
index 503126b..c2ec29d 100644
--- a/lib/sanitizer_common/sanitizer_flags.h
+++ b/lib/sanitizer_common/sanitizer_flags.h
@@ -18,6 +18,12 @@
 
 namespace __sanitizer {
 
+enum HandleSignalMode {
+  kHandleSignalNo,
+  kHandleSignalYes,
+  kHandleSignalExclusive,
+};
+
 struct CommonFlags {
 #define COMMON_FLAG(Type, Name, DefaultValue, Description) Type Name;
 #include "sanitizer_flags.inc"
diff --git a/lib/sanitizer_common/sanitizer_flags.inc b/lib/sanitizer_common/sanitizer_flags.inc
index d7fa34a..9f71861 100644
--- a/lib/sanitizer_common/sanitizer_flags.inc
+++ b/lib/sanitizer_common/sanitizer_flags.inc
@@ -62,7 +62,7 @@
 COMMON_FLAG(
     int, verbosity, 0,
     "Verbosity level (0 - silent, 1 - a bit of output, 2+ - more output).")
-COMMON_FLAG(bool, detect_leaks, true, "Enable memory leak detection.")
+COMMON_FLAG(bool, detect_leaks, !SANITIZER_MAC, "Enable memory leak detection.")
 COMMON_FLAG(
     bool, leak_check_at_exit, true,
     "Invoke leak checking in an atexit handler. Has no effect if "
@@ -75,20 +75,27 @@
             "If false, disable printing error summaries in addition to error "
             "reports.")
 COMMON_FLAG(int, print_module_map, 0,
-            "OS X only. 0 = don't print, 1 = print only once before process "
-            "exits, 2 = print after each report.")
+            "OS X only (0 - don't print, 1 - print only once before process "
+            "exits, 2 - print after each report).")
 COMMON_FLAG(bool, check_printf, true, "Check printf arguments.")
-COMMON_FLAG(bool, handle_segv, true,
-            "If set, registers the tool's custom SIGSEGV/SIGBUS handler.")
-COMMON_FLAG(bool, handle_abort, false,
-            "If set, registers the tool's custom SIGABRT handler.")
-COMMON_FLAG(bool, handle_sigill, false,
-            "If set, registers the tool's custom SIGILL handler.")
-COMMON_FLAG(bool, handle_sigfpe, true,
-            "If set, registers the tool's custom SIGFPE handler.")
-COMMON_FLAG(bool, allow_user_segv_handler, false,
-            "If set, allows user to register a SEGV handler even if the tool "
-            "registers one.")
+#define COMMON_FLAG_HANDLE_SIGNAL_HELP(signal) \
+    "Controls custom tool's " #signal " handler (0 - do not registers the " \
+    "handler, 1 - register the handler and allow user to set own, " \
+    "2 - registers the handler and block user from changing it). "
+COMMON_FLAG(HandleSignalMode, handle_segv, kHandleSignalYes,
+            COMMON_FLAG_HANDLE_SIGNAL_HELP(SIGSEGV))
+COMMON_FLAG(HandleSignalMode, handle_sigbus, kHandleSignalYes,
+            COMMON_FLAG_HANDLE_SIGNAL_HELP(SIGBUS))
+COMMON_FLAG(HandleSignalMode, handle_abort, kHandleSignalNo,
+            COMMON_FLAG_HANDLE_SIGNAL_HELP(SIGABRT))
+COMMON_FLAG(HandleSignalMode, handle_sigill, kHandleSignalNo,
+            COMMON_FLAG_HANDLE_SIGNAL_HELP(SIGILL))
+COMMON_FLAG(HandleSignalMode, handle_sigfpe, kHandleSignalYes,
+            COMMON_FLAG_HANDLE_SIGNAL_HELP(SIGFPE))
+#undef COMMON_FLAG_HANDLE_SIGNAL_HELP
+COMMON_FLAG(bool, allow_user_segv_handler, true,
+            "Deprecated. True has no effect, use handle_sigbus=1. If false, "
+            "handle_*=1 will be upgraded to handle_*=2.")
 COMMON_FLAG(bool, use_sigaltstack, true,
             "If set, uses alternate stack for signal handling.")
 COMMON_FLAG(bool, detect_deadlocks, false,
@@ -134,22 +141,6 @@
     bool, coverage, false,
     "If set, coverage information will be dumped at program shutdown (if the "
     "coverage instrumentation was enabled at compile time).")
-COMMON_FLAG(bool, coverage_pcs, true,
-            "If set (and if 'coverage' is set too), the coverage information "
-            "will be dumped as a set of PC offsets for every module.")
-COMMON_FLAG(bool, coverage_order_pcs, false,
-             "If true, the PCs will be dumped in the order they've"
-             " appeared during the execution.")
-COMMON_FLAG(bool, coverage_bitset, false,
-            "If set (and if 'coverage' is set too), the coverage information "
-            "will also be dumped as a bitset to a separate file.")
-COMMON_FLAG(bool, coverage_counters, false,
-            "If set (and if 'coverage' is set too), the bitmap that corresponds"
-            " to coverage counters will be dumped.")
-COMMON_FLAG(bool, coverage_direct, SANITIZER_ANDROID,
-            "If set, coverage information will be dumped directly to a memory "
-            "mapped file. This way data is not lost even if the process is "
-            "suddenly killed.")
 COMMON_FLAG(const char *, coverage_dir, ".",
             "Target directory for coverage dumps. Defaults to the current "
             "directory.")
@@ -190,12 +181,18 @@
 COMMON_FLAG(bool, intercept_strspn, true,
             "If set, uses custom wrappers for strspn and strcspn function "
             "to find more errors.")
+COMMON_FLAG(bool, intercept_strtok, true,
+            "If set, uses a custom wrapper for the strtok function "
+            "to find more errors.")
 COMMON_FLAG(bool, intercept_strpbrk, true,
             "If set, uses custom wrappers for strpbrk function "
             "to find more errors.")
 COMMON_FLAG(bool, intercept_strlen, true,
             "If set, uses custom wrappers for strlen and strnlen functions "
             "to find more errors.")
+COMMON_FLAG(bool, intercept_strndup, true,
+            "If set, uses custom wrappers for strndup functions "
+            "to find more errors.")
 COMMON_FLAG(bool, intercept_strchr, true,
             "If set, uses custom wrappers for strchr, strchrnul, and strrchr "
             "functions to find more errors.")
diff --git a/lib/sanitizer_common/sanitizer_interface_internal.h b/lib/sanitizer_common/sanitizer_interface_internal.h
index 174d5e9..b28d8f0 100644
--- a/lib/sanitizer_common/sanitizer_interface_internal.h
+++ b/lib/sanitizer_common/sanitizer_interface_internal.h
@@ -69,6 +69,32 @@
   int __sanitizer_get_module_and_offset_for_pc(
       __sanitizer::uptr pc, char *module_path,
       __sanitizer::uptr module_path_len, __sanitizer::uptr *pc_offset);
-  } // extern "C"
+
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_cmp();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_cmp1();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_cmp2();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_cmp4();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_cmp8();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_switch();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_div4();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_div8();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_gep();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_pc_indir();
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_pc_guard(__sanitizer::u32*);
+  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
+  void __sanitizer_cov_trace_pc_guard_init(__sanitizer::u32*,
+                                           __sanitizer::u32*);
+} // extern "C"
 
 #endif  // SANITIZER_INTERFACE_INTERNAL_H
diff --git a/lib/sanitizer_common/sanitizer_internal_defs.h b/lib/sanitizer_common/sanitizer_internal_defs.h
index 5338f79..f35b095 100644
--- a/lib/sanitizer_common/sanitizer_internal_defs.h
+++ b/lib/sanitizer_common/sanitizer_internal_defs.h
@@ -21,8 +21,11 @@
 
 // Only use SANITIZER_*ATTRIBUTE* before the function return type!
 #if SANITIZER_WINDOWS
+#if SANITIZER_IMPORT_INTERFACE
+# define SANITIZER_INTERFACE_ATTRIBUTE __declspec(dllimport)
+#else
 # define SANITIZER_INTERFACE_ATTRIBUTE __declspec(dllexport)
-// FIXME find out what we need on Windows, if anything.
+#endif
 # define SANITIZER_WEAK_ATTRIBUTE
 #elif SANITIZER_GO
 # define SANITIZER_INTERFACE_ATTRIBUTE
@@ -32,11 +35,46 @@
 # define SANITIZER_WEAK_ATTRIBUTE  __attribute__((weak))
 #endif
 
-#if (SANITIZER_LINUX || SANITIZER_MAC || SANITIZER_WINDOWS) && !SANITIZER_GO
+//--------------------------- WEAK FUNCTIONS ---------------------------------//
+// When working with weak functions, to simplify the code and make it more
+// portable, when possible define a default implementation using this macro:
+//
+// SANITIZER_INTERFACE_WEAK_DEF(<return_type>, <name>, <parameter list>)
+//
+// For example:
+//   SANITIZER_INTERFACE_WEAK_DEF(bool, compare, int a, int b) { return a > b; }
+//
+#if SANITIZER_WINDOWS
+#include "sanitizer_win_defs.h"
+# define SANITIZER_INTERFACE_WEAK_DEF(ReturnType, Name, ...)                   \
+  WIN_WEAK_EXPORT_DEF(ReturnType, Name, __VA_ARGS__)
+#else
+# define SANITIZER_INTERFACE_WEAK_DEF(ReturnType, Name, ...)                   \
+  extern "C" SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE            \
+  ReturnType Name(__VA_ARGS__)
+#endif
+
+// SANITIZER_SUPPORTS_WEAK_HOOKS means that we support real weak functions that
+// will evaluate to a null pointer when not defined.
+#if (SANITIZER_LINUX || SANITIZER_MAC) && !SANITIZER_GO
 # define SANITIZER_SUPPORTS_WEAK_HOOKS 1
 #else
 # define SANITIZER_SUPPORTS_WEAK_HOOKS 0
 #endif
+// For some weak hooks that will be called very often and we want to avoid the
+// overhead of executing the default implementation when it is not necessary,
+// we can use the flag SANITIZER_SUPPORTS_WEAK_HOOKS to only define the default
+// implementation for platforms that doesn't support weak symbols. For example:
+//
+//   #if !SANITIZER_SUPPORT_WEAK_HOOKS
+//     SANITIZER_INTERFACE_WEAK_DEF(bool, compare_hook, int a, int b) {
+//       return a > b;
+//     }
+//   #endif
+//
+// And then use it as: if (compare_hook) compare_hook(a, b);
+//----------------------------------------------------------------------------//
+
 
 // We can use .preinit_array section on Linux to call sanitizer initialization
 // functions very early in the process startup (unless PIC macro is defined).
@@ -114,6 +152,12 @@
 # endif
 #endif
 
+#if SANITIZER_MAC
+// On Darwin, thread IDs are 64-bit even on 32-bit systems.
+typedef u64 tid_t;
+#else
+typedef uptr tid_t;
+#endif
 
 // ----------- ATTENTION -------------
 // This header should NOT include any other headers to avoid portability issues.
@@ -289,7 +333,12 @@
 enum LinkerInitialized { LINKER_INITIALIZED = 0 };
 
 #if !defined(_MSC_VER) || defined(__clang__)
+#if SANITIZER_S390_31
+#define GET_CALLER_PC() \
+  (__sanitizer::uptr) __builtin_extract_return_addr(__builtin_return_address(0))
+#else
 #define GET_CALLER_PC() (__sanitizer::uptr) __builtin_return_address(0)
+#endif
 #define GET_CURRENT_FRAME() (__sanitizer::uptr) __builtin_frame_address(0)
 inline void Trap() {
   __builtin_trap();
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc
index 7328a5c..8c3c1e5 100644
--- a/lib/sanitizer_common/sanitizer_linux.cc
+++ b/lib/sanitizer_common/sanitizer_linux.cc
@@ -59,11 +59,17 @@
 #include <ucontext.h>
 #include <unistd.h>
 
+#if SANITIZER_LINUX
+#include <sys/utsname.h>
+#endif
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID
+#include <sys/personality.h>
+#endif
+
 #if SANITIZER_FREEBSD
 #include <sys/exec.h>
 #include <sys/sysctl.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
 #include <machine/atomic.h>
 extern "C" {
 // <sys/umtx.h> must be included after <errno.h> and <sys/types.h> on
@@ -77,6 +83,20 @@
 #include <sys/signal.h>
 #endif
 
+#ifndef __GLIBC_PREREQ
+#define __GLIBC_PREREQ(x, y) 0
+#endif
+
+#if SANITIZER_LINUX && __GLIBC_PREREQ(2, 16)
+# define SANITIZER_USE_GETAUXVAL 1
+#else
+# define SANITIZER_USE_GETAUXVAL 0
+#endif
+
+#if SANITIZER_USE_GETAUXVAL
+#include <sys/auxv.h>
+#endif
+
 #if SANITIZER_LINUX
 // <linux/time.h>
 struct kernel_timeval {
@@ -197,7 +217,6 @@
   out->st_atime = in->st_atime;
   out->st_mtime = in->st_mtime;
   out->st_ctime = in->st_ctime;
-  out->st_ino = in->st_ino;
 }
 #endif
 
@@ -217,13 +236,13 @@
   out->st_atime = in->st_atime_nsec;
   out->st_mtime = in->st_mtime_nsec;
   out->st_ctime = in->st_ctime_nsec;
-  out->st_ino = in->st_ino;
 }
 #endif
 
 uptr internal_stat(const char *path, void *buf) {
 #if SANITIZER_FREEBSD
-  return internal_syscall(SYSCALL(stat), path, buf);
+  return internal_syscall(SYSCALL(fstatat), AT_FDCWD, (uptr)path,
+                          (uptr)buf, 0);
 #elif SANITIZER_USES_CANONICAL_LINUX_SYSCALLS
   return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path,
                           (uptr)buf, 0);
@@ -247,7 +266,8 @@
 
 uptr internal_lstat(const char *path, void *buf) {
 #if SANITIZER_FREEBSD
-  return internal_syscall(SYSCALL(lstat), path, buf);
+  return internal_syscall(SYSCALL(fstatat), AT_FDCWD, (uptr)path,
+                          (uptr)buf, AT_SYMLINK_NOFOLLOW);
 #elif SANITIZER_USES_CANONICAL_LINUX_SYSCALLS
   return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path,
                          (uptr)buf, AT_SYMLINK_NOFOLLOW);
@@ -370,7 +390,7 @@
   return S_ISREG(st.st_mode);
 }
 
-uptr GetTid() {
+tid_t GetTid() {
 #if SANITIZER_FREEBSD
   return (uptr)pthread_self();
 #else
@@ -535,7 +555,7 @@
 
 void BlockingMutex::Unlock() {
   atomic_uint32_t *m = reinterpret_cast<atomic_uint32_t *>(&opaque_storage_);
-  u32 v = atomic_exchange(m, MtxUnlocked, memory_order_relaxed);
+  u32 v = atomic_exchange(m, MtxUnlocked, memory_order_release);
   CHECK_NE(v, MtxUnlocked);
   if (v == MtxSleeping) {
 #if SANITIZER_FREEBSD
@@ -590,7 +610,9 @@
 }
 
 uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count) {
-#if SANITIZER_USES_CANONICAL_LINUX_SYSCALLS
+#if SANITIZER_FREEBSD
+  return internal_syscall(SYSCALL(getdirentries), fd, (uptr)dirp, count, NULL);
+#elif SANITIZER_USES_CANONICAL_LINUX_SYSCALLS
   return internal_syscall(SYSCALL(getdents64), fd, (uptr)dirp, count);
 #else
   return internal_syscall(SYSCALL(getdents), fd, (uptr)dirp, count);
@@ -607,8 +629,7 @@
 }
 #endif
 
-uptr internal_sigaltstack(const struct sigaltstack *ss,
-                         struct sigaltstack *oss) {
+uptr internal_sigaltstack(const void *ss, void *oss) {
   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
 }
 
@@ -799,12 +820,80 @@
   return true;
 }
 
+#if SANITIZER_WORDSIZE == 32
+// Take care of unusable kernel area in top gigabyte.
+static uptr GetKernelAreaSize() {
+#if SANITIZER_LINUX && !SANITIZER_X32
+  const uptr gbyte = 1UL << 30;
+
+  // Firstly check if there are writable segments
+  // mapped to top gigabyte (e.g. stack).
+  MemoryMappingLayout proc_maps(/*cache_enabled*/true);
+  MemoryMappedSegment segment;
+  while (proc_maps.Next(&segment)) {
+    if ((segment.end >= 3 * gbyte) && segment.IsWritable()) return 0;
+  }
+
+#if !SANITIZER_ANDROID
+  // Even if nothing is mapped, top Gb may still be accessible
+  // if we are running on 64-bit kernel.
+  // Uname may report misleading results if personality type
+  // is modified (e.g. under schroot) so check this as well.
+  struct utsname uname_info;
+  int pers = personality(0xffffffffUL);
+  if (!(pers & PER_MASK)
+      && uname(&uname_info) == 0
+      && internal_strstr(uname_info.machine, "64"))
+    return 0;
+#endif  // SANITIZER_ANDROID
+
+  // Top gigabyte is reserved for kernel.
+  return gbyte;
+#else
+  return 0;
+#endif  // SANITIZER_LINUX && !SANITIZER_X32
+}
+#endif  // SANITIZER_WORDSIZE == 32
+
+uptr GetMaxVirtualAddress() {
+#if SANITIZER_WORDSIZE == 64
+# if defined(__powerpc64__) || defined(__aarch64__)
+  // On PowerPC64 we have two different address space layouts: 44- and 46-bit.
+  // We somehow need to figure out which one we are using now and choose
+  // one of 0x00000fffffffffffUL and 0x00003fffffffffffUL.
+  // Note that with 'ulimit -s unlimited' the stack is moved away from the top
+  // of the address space, so simply checking the stack address is not enough.
+  // This should (does) work for both PowerPC64 Endian modes.
+  // Similarly, aarch64 has multiple address space layouts: 39, 42 and 47-bit.
+  return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1;
+# elif defined(__mips64)
+  return (1ULL << 40) - 1;  // 0x000000ffffffffffUL;
+# elif defined(__s390x__)
+  return (1ULL << 53) - 1;  // 0x001fffffffffffffUL;
+# else
+  return (1ULL << 47) - 1;  // 0x00007fffffffffffUL;
+# endif
+#else  // SANITIZER_WORDSIZE == 32
+# if defined(__s390__)
+  return (1ULL << 31) - 1;  // 0x7fffffff;
+# else
+  uptr res = (1ULL << 32) - 1;  // 0xffffffff;
+  if (!common_flags()->full_address_space)
+    res -= GetKernelAreaSize();
+  CHECK_LT(reinterpret_cast<uptr>(&res), res);
+  return res;
+# endif
+#endif  // SANITIZER_WORDSIZE
+}
+
 uptr GetPageSize() {
 // Android post-M sysconf(_SC_PAGESIZE) crashes if called from .preinit_array.
 #if SANITIZER_ANDROID
   return 4096;
 #elif SANITIZER_LINUX && (defined(__x86_64__) || defined(__i386__))
   return EXEC_PAGESIZE;
+#elif SANITIZER_USE_GETAUXVAL
+  return getauxval(AT_PAGESZ);
 #else
   return sysconf(_SC_PAGESIZE);  // EXEC_PAGESIZE may not be trustworthy.
 #endif
@@ -1097,36 +1186,50 @@
 uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
                    int *parent_tidptr, void *newtls, int *child_tidptr) {
   long long res;
-/* Stack frame offsets.  */
-#if _CALL_ELF != 2
-#define FRAME_MIN_SIZE         112
-#define FRAME_TOC_SAVE         40
+// Stack frame structure.
+#if SANITIZER_PPC64V1
+//   Back chain == 0        (SP + 112)
+// Frame (112 bytes):
+//   Parameter save area    (SP + 48), 8 doublewords
+//   TOC save area          (SP + 40)
+//   Link editor doubleword (SP + 32)
+//   Compiler doubleword    (SP + 24)
+//   LR save area           (SP + 16)
+//   CR save area           (SP + 8)
+//   Back chain             (SP + 0)
+# define FRAME_SIZE 112
+# define FRAME_TOC_SAVE_OFFSET 40
+#elif SANITIZER_PPC64V2
+//   Back chain == 0        (SP + 32)
+// Frame (32 bytes):
+//   TOC save area          (SP + 24)
+//   LR save area           (SP + 16)
+//   CR save area           (SP + 8)
+//   Back chain             (SP + 0)
+# define FRAME_SIZE 32
+# define FRAME_TOC_SAVE_OFFSET 24
 #else
-#define FRAME_MIN_SIZE         32
-#define FRAME_TOC_SAVE         24
+# error "Unsupported PPC64 ABI"
 #endif
   if (!fn || !child_stack)
     return -EINVAL;
   CHECK_EQ(0, (uptr)child_stack % 16);
-  child_stack = (char *)child_stack - 2 * sizeof(unsigned long long);
-  ((unsigned long long *)child_stack)[0] = (uptr)fn;
-  ((unsigned long long *)child_stack)[1] = (uptr)arg;
 
   register int (*__fn)(void *) __asm__("r3") = fn;
   register void *__cstack      __asm__("r4") = child_stack;
   register int __flags         __asm__("r5") = flags;
-  register void * __arg        __asm__("r6") = arg;
-  register int * __ptidptr     __asm__("r7") = parent_tidptr;
-  register void * __newtls     __asm__("r8") = newtls;
-  register int * __ctidptr     __asm__("r9") = child_tidptr;
+  register void *__arg         __asm__("r6") = arg;
+  register int *__ptidptr      __asm__("r7") = parent_tidptr;
+  register void *__newtls      __asm__("r8") = newtls;
+  register int *__ctidptr      __asm__("r9") = child_tidptr;
 
  __asm__ __volatile__(
-           /* fn, arg, child_stack are saved acrVoss the syscall */
+           /* fn and arg are saved across the syscall */
            "mr 28, %5\n\t"
-           "mr 29, %6\n\t"
            "mr 27, %8\n\t"
 
            /* syscall
+             r0 == __NR_clone
              r3 == flags
              r4 == child_stack
              r5 == parent_tidptr
@@ -1144,15 +1247,21 @@
            "crandc cr1*4+eq, cr1*4+eq, cr0*4+so\n\t"
            "bne-   cr1, 1f\n\t"
 
+           /* Set up stack frame */
+           "li    29, 0\n\t"
+           "stdu  29, -8(1)\n\t"
+           "stdu  1, -%12(1)\n\t"
            /* Do the function call */
            "std   2, %13(1)\n\t"
-#if _CALL_ELF != 2
+#if SANITIZER_PPC64V1
            "ld    0, 0(28)\n\t"
            "ld    2, 8(28)\n\t"
            "mtctr 0\n\t"
-#else
+#elif SANITIZER_PPC64V2
            "mr    12, 28\n\t"
            "mtctr 12\n\t"
+#else
+# error "Unsupported PPC64 ABI"
 #endif
            "mr    3, 27\n\t"
            "bctrl\n\t"
@@ -1166,13 +1275,151 @@
            "1:\n\t"
            "mr %0, 3\n\t"
              : "=r" (res)
-             : "0" (-1), "i" (EINVAL),
-               "i" (__NR_clone), "i" (__NR_exit),
-               "r" (__fn), "r" (__cstack), "r" (__flags),
-               "r" (__arg), "r" (__ptidptr), "r" (__newtls),
-               "r" (__ctidptr), "i" (FRAME_MIN_SIZE), "i" (FRAME_TOC_SAVE)
-             : "cr0", "cr1", "memory", "ctr",
-               "r0", "r29", "r27", "r28");
+             : "0" (-1),
+               "i" (EINVAL),
+               "i" (__NR_clone),
+               "i" (__NR_exit),
+               "r" (__fn),
+               "r" (__cstack),
+               "r" (__flags),
+               "r" (__arg),
+               "r" (__ptidptr),
+               "r" (__newtls),
+               "r" (__ctidptr),
+               "i" (FRAME_SIZE),
+               "i" (FRAME_TOC_SAVE_OFFSET)
+             : "cr0", "cr1", "memory", "ctr", "r0", "r27", "r28", "r29");
+  return res;
+}
+#elif defined(__i386__) && SANITIZER_LINUX
+uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
+                    int *parent_tidptr, void *newtls, int *child_tidptr) {
+  int res;
+  if (!fn || !child_stack)
+    return -EINVAL;
+  CHECK_EQ(0, (uptr)child_stack % 16);
+  child_stack = (char *)child_stack - 7 * sizeof(unsigned int);
+  ((unsigned int *)child_stack)[0] = (uptr)flags;
+  ((unsigned int *)child_stack)[1] = (uptr)0;
+  ((unsigned int *)child_stack)[2] = (uptr)fn;
+  ((unsigned int *)child_stack)[3] = (uptr)arg;
+  __asm__ __volatile__(
+                       /* %eax = syscall(%eax = SYSCALL(clone),
+                        *                %ebx = flags,
+                        *                %ecx = child_stack,
+                        *                %edx = parent_tidptr,
+                        *                %esi  = new_tls,
+                        *                %edi = child_tidptr)
+                        */
+
+                        /* Obtain flags */
+                        "movl    (%%ecx), %%ebx\n"
+                        /* Do the system call */
+                        "pushl   %%ebx\n"
+                        "pushl   %%esi\n"
+                        "pushl   %%edi\n"
+                        /* Remember the flag value.  */
+                        "movl    %%ebx, (%%ecx)\n"
+                        "int     $0x80\n"
+                        "popl    %%edi\n"
+                        "popl    %%esi\n"
+                        "popl    %%ebx\n"
+
+                        /* if (%eax != 0)
+                         *   return;
+                         */
+
+                        "test    %%eax,%%eax\n"
+                        "jnz    1f\n"
+
+                        /* terminate the stack frame */
+                        "xorl   %%ebp,%%ebp\n"
+                        /* Call FN. */
+                        "call    *%%ebx\n"
+#ifdef PIC
+                        "call    here\n"
+                        "here:\n"
+                        "popl    %%ebx\n"
+                        "addl    $_GLOBAL_OFFSET_TABLE_+[.-here], %%ebx\n"
+#endif
+                        /* Call exit */
+                        "movl    %%eax, %%ebx\n"
+                        "movl    %2, %%eax\n"
+                        "int     $0x80\n"
+                        "1:\n"
+                       : "=a" (res)
+                       : "a"(SYSCALL(clone)), "i"(SYSCALL(exit)),
+                         "c"(child_stack),
+                         "d"(parent_tidptr),
+                         "S"(newtls),
+                         "D"(child_tidptr)
+                       : "memory");
+  return res;
+}
+#elif defined(__arm__) && SANITIZER_LINUX
+uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
+                    int *parent_tidptr, void *newtls, int *child_tidptr) {
+  unsigned int res;
+  if (!fn || !child_stack)
+    return -EINVAL;
+  child_stack = (char *)child_stack - 2 * sizeof(unsigned int);
+  ((unsigned int *)child_stack)[0] = (uptr)fn;
+  ((unsigned int *)child_stack)[1] = (uptr)arg;
+  register int r0 __asm__("r0") = flags;
+  register void *r1 __asm__("r1") = child_stack;
+  register int *r2 __asm__("r2") = parent_tidptr;
+  register void *r3 __asm__("r3") = newtls;
+  register int *r4 __asm__("r4") = child_tidptr;
+  register int r7 __asm__("r7") = __NR_clone;
+
+#if __ARM_ARCH > 4 || defined (__ARM_ARCH_4T__)
+# define ARCH_HAS_BX
+#endif
+#if __ARM_ARCH > 4
+# define ARCH_HAS_BLX
+#endif
+
+#ifdef ARCH_HAS_BX
+# ifdef ARCH_HAS_BLX
+#  define BLX(R) "blx "  #R "\n"
+# else
+#  define BLX(R) "mov lr, pc; bx " #R "\n"
+# endif
+#else
+# define BLX(R)  "mov lr, pc; mov pc," #R "\n"
+#endif
+
+  __asm__ __volatile__(
+                       /* %r0 = syscall(%r7 = SYSCALL(clone),
+                        *               %r0 = flags,
+                        *               %r1 = child_stack,
+                        *               %r2 = parent_tidptr,
+                        *               %r3  = new_tls,
+                        *               %r4 = child_tidptr)
+                        */
+
+                       /* Do the system call */
+                       "swi 0x0\n"
+
+                       /* if (%r0 != 0)
+                        *   return %r0;
+                        */
+                       "cmp r0, #0\n"
+                       "bne 1f\n"
+
+                       /* In the child, now. Call "fn(arg)". */
+                       "ldr r0, [sp, #4]\n"
+                       "ldr ip, [sp], #8\n"
+                       BLX(ip)
+                       /* Call _exit(%r0). */
+                       "mov r7, %7\n"
+                       "swi 0x0\n"
+                       "1:\n"
+                       "mov %0, r0\n"
+                       : "=r"(res)
+                       : "r"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r7),
+                         "i"(__NR_exit)
+                       : "memory");
   return res;
 }
 #endif  // defined(__x86_64__) && SANITIZER_LINUX
@@ -1220,14 +1467,27 @@
 
 #endif
 
-bool IsHandledDeadlySignal(int signum) {
-  if (common_flags()->handle_abort && signum == SIGABRT)
-    return true;
-  if (common_flags()->handle_sigill && signum == SIGILL)
-    return true;
-  if (common_flags()->handle_sigfpe && signum == SIGFPE)
-    return true;
-  return (signum == SIGSEGV || signum == SIGBUS) && common_flags()->handle_segv;
+static HandleSignalMode GetHandleSignalModeImpl(int signum) {
+  switch (signum) {
+    case SIGABRT:
+      return common_flags()->handle_abort;
+    case SIGILL:
+      return common_flags()->handle_sigill;
+    case SIGFPE:
+      return common_flags()->handle_sigfpe;
+    case SIGSEGV:
+      return common_flags()->handle_segv;
+    case SIGBUS:
+      return common_flags()->handle_sigbus;
+  }
+  return kHandleSignalNo;
+}
+
+HandleSignalMode GetHandleSignalMode(int signum) {
+  HandleSignalMode result = GetHandleSignalModeImpl(signum);
+  if (result == kHandleSignalYes && !common_flags()->allow_user_segv_handler)
+    return kHandleSignalExclusive;
+  return result;
 }
 
 #if !SANITIZER_GO
@@ -1395,11 +1655,53 @@
 
 void PrintModuleMap() { }
 
-uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding) {
+void CheckNoDeepBind(const char *filename, int flag) {
+#ifdef RTLD_DEEPBIND
+  if (flag & RTLD_DEEPBIND) {
+    Report(
+        "You are trying to dlopen a %s shared library with RTLD_DEEPBIND flag"
+        " which is incompatibe with sanitizer runtime "
+        "(see https://github.com/google/sanitizers/issues/611 for details"
+        "). If you want to run %s library under sanitizers please remove "
+        "RTLD_DEEPBIND from dlopen flags.\n",
+        filename, filename);
+    Die();
+  }
+#endif
+}
+
+uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,
+                              uptr *largest_gap_found) {
   UNREACHABLE("FindAvailableMemoryRange is not available");
   return 0;
 }
 
+bool GetRandom(void *buffer, uptr length) {
+  if (!buffer || !length || length > 256)
+    return false;
+#if defined(__NR_getrandom)
+  static atomic_uint8_t skip_getrandom_syscall;
+  if (!atomic_load_relaxed(&skip_getrandom_syscall)) {
+    // Up to 256 bytes, getrandom will not be interrupted.
+    uptr res = internal_syscall(SYSCALL(getrandom), buffer, length, 0);
+    int rverrno = 0;
+    if (internal_iserror(res, &rverrno) && rverrno == ENOSYS)
+      atomic_store_relaxed(&skip_getrandom_syscall, 1);
+    else if (res == length)
+      return true;
+  }
+#endif
+  uptr fd = internal_open("/dev/urandom", O_RDONLY);
+  if (internal_iserror(fd))
+    return false;
+  // internal_read deals with EINTR.
+  uptr res = internal_read(fd, buffer, length);
+  if (internal_iserror(res))
+    return false;
+  internal_close(fd);
+  return true;
+}
+
 } // namespace __sanitizer
 
 #endif // SANITIZER_FREEBSD || SANITIZER_LINUX
diff --git a/lib/sanitizer_common/sanitizer_linux.h b/lib/sanitizer_common/sanitizer_linux.h
index d4d0f47..11cad6b 100644
--- a/lib/sanitizer_common/sanitizer_linux.h
+++ b/lib/sanitizer_common/sanitizer_linux.h
@@ -21,7 +21,6 @@
 #include "sanitizer_platform_limits_posix.h"
 
 struct link_map;  // Opaque type returned by dlopen().
-struct sigaltstack;
 
 namespace __sanitizer {
 // Dirent structure for getdents(). Note that this structure is different from
@@ -30,8 +29,7 @@
 
 // Syscall wrappers.
 uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
-uptr internal_sigaltstack(const struct sigaltstack* ss,
-                          struct sigaltstack* oss);
+uptr internal_sigaltstack(const void* ss, void* oss);
 uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
     __sanitizer_sigset_t *oldset);
 
@@ -48,7 +46,8 @@
 #endif
 void internal_sigdelset(__sanitizer_sigset_t *set, int signum);
 #if defined(__x86_64__) || defined(__mips__) || defined(__aarch64__) \
-  || defined(__powerpc64__) || defined(__s390__)
+  || defined(__powerpc64__) || defined(__s390__) || defined(__i386__) \
+  || defined(__arm__)
 uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,
                     int *parent_tidptr, void *newtls, int *child_tidptr);
 #endif
@@ -87,6 +86,46 @@
 
 // Call cb for each region mapped by map.
 void ForEachMappedRegion(link_map *map, void (*cb)(const void *, uptr));
+
+#if SANITIZER_ANDROID
+
+#if defined(__aarch64__)
+# define __get_tls() \
+    ({ void** __v; __asm__("mrs %0, tpidr_el0" : "=r"(__v)); __v; })
+#elif defined(__arm__)
+# define __get_tls() \
+    ({ void** __v; __asm__("mrc p15, 0, %0, c13, c0, 3" : "=r"(__v)); __v; })
+#elif defined(__mips__)
+// On mips32r1, this goes via a kernel illegal instruction trap that's
+// optimized for v1.
+# define __get_tls() \
+    ({ register void** __v asm("v1"); \
+       __asm__(".set    push\n" \
+               ".set    mips32r2\n" \
+               "rdhwr   %0,$29\n" \
+               ".set    pop\n" : "=r"(__v)); \
+       __v; })
+#elif defined(__i386__)
+# define __get_tls() \
+    ({ void** __v; __asm__("movl %%gs:0, %0" : "=r"(__v)); __v; })
+#elif defined(__x86_64__)
+# define __get_tls() \
+    ({ void** __v; __asm__("mov %%fs:0, %0" : "=r"(__v)); __v; })
+#else
+#error "Unsupported architecture."
+#endif
+
+// The Android Bionic team has allocated a TLS slot for TSan starting with N,
+// given that Android currently doesn't support ELF TLS. It is used to store
+// Sanitizers thread specific data.
+static const int TLS_SLOT_TSAN = 8;
+
+ALWAYS_INLINE uptr *get_android_tls_ptr() {
+  return reinterpret_cast<uptr *>(&__get_tls()[TLS_SLOT_TSAN]);
+}
+
+#endif  // SANITIZER_ANDROID
+
 }  // namespace __sanitizer
 
 #endif  // SANITIZER_FREEBSD || SANITIZER_LINUX
diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_linux_libcdep.cc
index f99f0b5..52196db 100644
--- a/lib/sanitizer_common/sanitizer_linux_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cc
@@ -81,28 +81,25 @@
 
     // Find the mapping that contains a stack variable.
     MemoryMappingLayout proc_maps(/*cache_enabled*/true);
-    uptr start, end, offset;
+    MemoryMappedSegment segment;
     uptr prev_end = 0;
-    while (proc_maps.Next(&start, &end, &offset, nullptr, 0,
-          /* protection */nullptr)) {
-      if ((uptr)&rl < end)
-        break;
-      prev_end = end;
+    while (proc_maps.Next(&segment)) {
+      if ((uptr)&rl < segment.end) break;
+      prev_end = segment.end;
     }
-    CHECK((uptr)&rl >= start && (uptr)&rl < end);
+    CHECK((uptr)&rl >= segment.start && (uptr)&rl < segment.end);
 
     // Get stacksize from rlimit, but clip it so that it does not overlap
     // with other mappings.
     uptr stacksize = rl.rlim_cur;
-    if (stacksize > end - prev_end)
-      stacksize = end - prev_end;
+    if (stacksize > segment.end - prev_end) stacksize = segment.end - prev_end;
     // When running with unlimited stack size, we still want to set some limit.
     // The unlimited stack size is caused by 'ulimit -s unlimited'.
     // Also, for some reason, GNU make spawns subprocesses with unlimited stack.
     if (stacksize > kMaxThreadStackSize)
       stacksize = kMaxThreadStackSize;
-    *stack_top = end;
-    *stack_bottom = end - stacksize;
+    *stack_top = segment.end;
+    *stack_bottom = segment.end - stacksize;
     return;
   }
   pthread_attr_t attr;
@@ -113,7 +110,6 @@
   my_pthread_attr_getstack(&attr, &stackaddr, &stacksize);
   pthread_attr_destroy(&attr);
 
-  CHECK_LE(stacksize, kMaxThreadStackSize);  // Sanity check.
   *stack_top = (uptr)stackaddr + stacksize;
   *stack_bottom = (uptr)stackaddr;
 }
@@ -183,8 +179,8 @@
 #endif  // !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO
 
 #if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) \
-    || defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__)) \
-    && SANITIZER_LINUX && !SANITIZER_ANDROID
+    || defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) \
+    || defined(__arm__)) && SANITIZER_LINUX && !SANITIZER_ANDROID
 // sizeof(struct pthread) from glibc.
 static atomic_uintptr_t kThreadDescriptorSize;
 
@@ -192,14 +188,14 @@
   uptr val = atomic_load(&kThreadDescriptorSize, memory_order_relaxed);
   if (val)
     return val;
-#if defined(__x86_64__) || defined(__i386__)
+#if defined(__x86_64__) || defined(__i386__) || defined(__arm__)
 #ifdef _CS_GNU_LIBC_VERSION
   char buf[64];
   uptr len = confstr(_CS_GNU_LIBC_VERSION, buf, sizeof(buf));
   if (len < sizeof(buf) && internal_strncmp(buf, "glibc 2.", 8) == 0) {
     char *end;
     int minor = internal_simple_strtoll(buf + 8, &end, 10);
-    if (end != buf + 8 && (*end == '\0' || *end == '.')) {
+    if (end != buf + 8 && (*end == '\0' || *end == '.' || *end == '-')) {
       int patch = 0;
       if (*end == '.')
         // strtoll will return 0 if no valid conversion could be performed
@@ -208,6 +204,9 @@
       /* sizeof(struct pthread) values from various glibc versions.  */
       if (SANITIZER_X32)
         val = 1728;  // Assume only one particular version for x32.
+      // For ARM sizeof(struct pthread) changed in Glibc 2.23.
+      else if (SANITIZER_ARM)
+        val = minor <= 22 ? 1120 : 1216;
       else if (minor <= 3)
         val = FIRST_32_SECOND_64(1104, 1696);
       else if (minor == 4)
@@ -270,9 +269,7 @@
 # endif
   const uptr kTlsAlign = 16;
   const uptr kTlsPreTcbSize =
-    (ThreadDescriptorSize() + kTcbHead + kTlsAlign - 1) & ~(kTlsAlign - 1);
-  InitTlsSize();
-  g_tls_size = (g_tls_size + kTlsPreTcbSize + kTlsAlign -1) & ~(kTlsAlign - 1);
+      RoundUpTo(ThreadDescriptorSize() + kTcbHead, kTlsAlign);
   return kTlsPreTcbSize;
 }
 #endif
@@ -295,7 +292,7 @@
                 rdhwr %0,$29;\
                 .set pop" : "=r" (thread_pointer));
   descr_addr = thread_pointer - kTlsTcbOffset - TlsPreTcbSize();
-# elif defined(__aarch64__)
+# elif defined(__aarch64__) || defined(__arm__)
   descr_addr = reinterpret_cast<uptr>(__builtin_thread_pointer()) -
                                       ThreadDescriptorSize();
 # elif defined(__s390__)
@@ -344,7 +341,8 @@
   *size = GetTlsSize();
   *addr -= *size;
   *addr += ThreadDescriptorSize();
-# elif defined(__mips__) || defined(__aarch64__) || defined(__powerpc64__)
+# elif defined(__mips__) || defined(__aarch64__) || defined(__powerpc64__) \
+    || defined(__arm__)
   *addr = ThreadSelf();
   *size = GetTlsSize();
 # else
@@ -379,6 +377,8 @@
   uptr addr, size;
   GetTls(&addr, &size);
   return size;
+#elif defined(__mips__) || defined(__powerpc64__)
+  return RoundUpTo(g_tls_size + TlsPreTcbSize(), 16);
 #else
   return g_tls_size;
 #endif
@@ -443,7 +443,9 @@
       uptr cur_beg = info->dlpi_addr + phdr->p_vaddr;
       uptr cur_end = cur_beg + phdr->p_memsz;
       bool executable = phdr->p_flags & PF_X;
-      cur_module.addAddressRange(cur_beg, cur_end, executable);
+      bool writable = phdr->p_flags & PF_W;
+      cur_module.addAddressRange(cur_beg, cur_end, executable,
+                                 writable);
     }
   }
   data->modules->push_back(cur_module);
@@ -546,6 +548,13 @@
     WriteToSyslog(str);
 }
 
+#if SANITIZER_ANDROID && __ANDROID_API__ >= 21
+extern "C" void android_set_abort_message(const char *msg);
+void SetAbortMessage(const char *str) { android_set_abort_message(str); }
+#else
+void SetAbortMessage(const char *str) {}
+#endif
+
 #endif // SANITIZER_LINUX
 
 } // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_linux_s390.cc b/lib/sanitizer_common/sanitizer_linux_s390.cc
index 053fd17..a6da82e 100644
--- a/lib/sanitizer_common/sanitizer_linux_s390.cc
+++ b/lib/sanitizer_common/sanitizer_linux_s390.cc
@@ -136,6 +136,18 @@
   if (ptr[0] == '.')
     patch = internal_simple_strtoll(ptr+1, &ptr, 10);
   if (major < 3) {
+    if (major == 2 && minor == 6 && patch == 32 && ptr[0] == '-' &&
+        internal_strstr(ptr, ".el6")) {
+      // Check RHEL6
+      int r1 = internal_simple_strtoll(ptr+1, &ptr, 10);
+      if (r1 >= 657) // 2.6.32-657.el6 or later
+        return true;
+      if (r1 == 642 && ptr[0] == '.') {
+        int r2 = internal_simple_strtoll(ptr+1, &ptr, 10);
+        if (r2 >= 9) // 2.6.32-642.9.1.el6 or later
+          return true;
+      }
+    }
     // <3.0 is bad.
     return false;
   } else if (major == 3) {
@@ -145,6 +157,18 @@
     // 3.12.58+ is OK.
     if (minor == 12 && patch >= 58)
       return true;
+    if (minor == 10 && patch == 0 && ptr[0] == '-' &&
+        internal_strstr(ptr, ".el7")) {
+      // Check RHEL7
+      int r1 = internal_simple_strtoll(ptr+1, &ptr, 10);
+      if (r1 >= 426) // 3.10.0-426.el7 or later
+        return true;
+      if (r1 == 327 && ptr[0] == '.') {
+        int r2 = internal_simple_strtoll(ptr+1, &ptr, 10);
+        if (r2 >= 27) // 3.10.0-327.27.1.el7 or later
+          return true;
+      }
+    }
     // Otherwise, bad.
     return false;
   } else if (major == 4) {
@@ -154,6 +178,13 @@
     // 4.4.6+ is OK.
     if (minor == 4 && patch >= 6)
       return true;
+    if (minor == 4 && patch == 0 && ptr[0] == '-' &&
+        internal_strstr(buf.version, "Ubuntu")) {
+      // Check Ubuntu 16.04
+      int r1 = internal_simple_strtoll(ptr+1, &ptr, 10);
+      if (r1 >= 13) // 4.4.0-13 or later
+        return true;
+    }
     // Otherwise, OK if 4.5+.
     return minor >= 5;
   } else {
diff --git a/lib/sanitizer_common/sanitizer_list.h b/lib/sanitizer_common/sanitizer_list.h
index c78cb4c..598ce51 100644
--- a/lib/sanitizer_common/sanitizer_list.h
+++ b/lib/sanitizer_common/sanitizer_list.h
@@ -70,6 +70,17 @@
     size_--;
   }
 
+  void extract(Item *prev, Item *x) {
+    CHECK(!empty());
+    CHECK_NE(prev, nullptr);
+    CHECK_NE(x, nullptr);
+    CHECK_EQ(prev->next, x);
+    prev->next = x->next;
+    if (last_ == x)
+      last_ = prev;
+    size_--;
+  }
+
   Item *front() { return first_; }
   const Item *front() const { return first_; }
   Item *back() { return last_; }
diff --git a/lib/sanitizer_common/sanitizer_mac.cc b/lib/sanitizer_common/sanitizer_mac.cc
index 4fcef60..1edd415 100644
--- a/lib/sanitizer_common/sanitizer_mac.cc
+++ b/lib/sanitizer_common/sanitizer_mac.cc
@@ -93,20 +93,22 @@
 
 #include "sanitizer_syscall_generic.inc"
 
-// Direct syscalls, don't call libmalloc hooks.
+// Direct syscalls, don't call libmalloc hooks (but not available on 10.6).
 extern "C" void *__mmap(void *addr, size_t len, int prot, int flags, int fildes,
-                        off_t off);
-extern "C" int __munmap(void *, size_t);
+                        off_t off) SANITIZER_WEAK_ATTRIBUTE;
+extern "C" int __munmap(void *, size_t) SANITIZER_WEAK_ATTRIBUTE;
 
 // ---------------------- sanitizer_libc.h
 uptr internal_mmap(void *addr, size_t length, int prot, int flags,
                    int fd, u64 offset) {
   if (fd == -1) fd = VM_MAKE_TAG(VM_MEMORY_ANALYSIS_TOOL);
-  return (uptr)__mmap(addr, length, prot, flags, fd, offset);
+  if (&__mmap) return (uptr)__mmap(addr, length, prot, flags, fd, offset);
+  return (uptr)mmap(addr, length, prot, flags, fd, offset);
 }
 
 uptr internal_munmap(void *addr, uptr length) {
-  return __munmap(addr, length);
+  if (&__munmap) return __munmap(addr, length);
+  return munmap(addr, length);
 }
 
 int internal_mprotect(void *addr, uptr length, int prot) {
@@ -193,17 +195,19 @@
   return pthread_sigmask(how, set, oldset);
 }
 
-// Doesn't call pthread_atfork() handlers.
-extern "C" pid_t __fork(void);
+// Doesn't call pthread_atfork() handlers (but not available on 10.6).
+extern "C" pid_t __fork(void) SANITIZER_WEAK_ATTRIBUTE;
 
 int internal_fork() {
-  return __fork();
+  if (&__fork)
+    return __fork();
+  return fork();
 }
 
 int internal_forkpty(int *amaster) {
   int master, slave;
   if (openpty(&master, &slave, nullptr, nullptr, nullptr) == -1) return -1;
-  int pid = __fork();
+  int pid = internal_fork();
   if (pid == -1) {
     close(master);
     close(slave);
@@ -249,9 +253,8 @@
   return S_ISREG(st.st_mode);
 }
 
-uptr GetTid() {
-  // FIXME: This can potentially get truncated on 32-bit, where uptr is 4 bytes.
-  uint64_t tid;
+tid_t GetTid() {
+  tid_t tid;
   pthread_threadid_np(nullptr, &tid);
   return tid;
 }
@@ -345,20 +348,16 @@
 void BlockingMutex::Lock() {
   CHECK(sizeof(OSSpinLock) <= sizeof(opaque_storage_));
   CHECK_EQ(OS_SPINLOCK_INIT, 0);
-  CHECK_NE(owner_, (uptr)pthread_self());
+  CHECK_EQ(owner_, 0);
   OSSpinLockLock((OSSpinLock*)&opaque_storage_);
-  CHECK(!owner_);
-  owner_ = (uptr)pthread_self();
 }
 
 void BlockingMutex::Unlock() {
-  CHECK(owner_ == (uptr)pthread_self());
-  owner_ = 0;
   OSSpinLockUnlock((OSSpinLock*)&opaque_storage_);
 }
 
 void BlockingMutex::CheckLocked() {
-  CHECK_EQ((uptr)pthread_self(), owner_);
+  CHECK_NE(*(OSSpinLock*)&opaque_storage_, 0);
 }
 
 u64 NanoTime() {
@@ -372,6 +371,27 @@
 void InitTlsSize() {
 }
 
+uptr TlsBaseAddr() {
+  uptr segbase = 0;
+#if defined(__x86_64__)
+  asm("movq %%gs:0,%0" : "=r"(segbase));
+#elif defined(__i386__)
+  asm("movl %%gs:0,%0" : "=r"(segbase));
+#endif
+  return segbase;
+}
+
+// The size of the tls on darwin does not appear to be well documented,
+// however the vm memory map suggests that it is 1024 uptrs in size,
+// with a size of 0x2000 bytes on x86_64 and 0x1000 bytes on i386.
+uptr TlsSize() {
+#if defined(__x86_64__) || defined(__i386__)
+  return 1024 * sizeof(uptr);
+#else
+  return 0;
+#endif
+}
+
 void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size,
                           uptr *tls_addr, uptr *tls_size) {
 #if !SANITIZER_GO
@@ -379,8 +399,8 @@
   GetThreadStackTopAndBottom(main, &stack_top, &stack_bottom);
   *stk_addr = stack_bottom;
   *stk_size = stack_top - stack_bottom;
-  *tls_addr = 0;
-  *tls_size = 0;
+  *tls_addr = TlsBaseAddr();
+  *tls_size = TlsSize();
 #else
   *stk_addr = 0;
   *stk_size = 0;
@@ -395,15 +415,30 @@
   memory_mapping.DumpListOfModules(&modules_);
 }
 
-bool IsHandledDeadlySignal(int signum) {
+static HandleSignalMode GetHandleSignalModeImpl(int signum) {
+  switch (signum) {
+    case SIGABRT:
+      return common_flags()->handle_abort;
+    case SIGILL:
+      return common_flags()->handle_sigill;
+    case SIGFPE:
+      return common_flags()->handle_sigfpe;
+    case SIGSEGV:
+      return common_flags()->handle_segv;
+    case SIGBUS:
+      return common_flags()->handle_sigbus;
+  }
+  return kHandleSignalNo;
+}
+
+HandleSignalMode GetHandleSignalMode(int signum) {
+  // Handling fatal signals on watchOS and tvOS devices is disallowed.
   if ((SANITIZER_WATCHOS || SANITIZER_TVOS) && !(SANITIZER_IOSSIM))
-    // Handling fatal signals on watchOS and tvOS devices is disallowed.
-    return false;
-  if (common_flags()->handle_abort && signum == SIGABRT)
-    return true;
-  if (common_flags()->handle_sigill && signum == SIGILL)
-    return true;
-  return (signum == SIGSEGV || signum == SIGBUS) && common_flags()->handle_segv;
+    return kHandleSignalNo;
+  HandleSignalMode result = GetHandleSignalModeImpl(signum);
+  if (result == kHandleSignalYes && !common_flags()->allow_user_segv_handler)
+    return kHandleSignalExclusive;
+  return result;
 }
 
 MacosVersion cached_macos_version = MACOS_VERSION_UNINITIALIZED;
@@ -765,9 +800,69 @@
   return *_NSGetArgv();
 }
 
+#if defined(__aarch64__) && SANITIZER_IOS && !SANITIZER_IOSSIM
+// The task_vm_info struct is normally provided by the macOS SDK, but we need
+// fields only available in 10.12+. Declare the struct manually to be able to
+// build against older SDKs.
+struct __sanitizer_task_vm_info {
+  mach_vm_size_t virtual_size;
+  integer_t region_count;
+  integer_t page_size;
+  mach_vm_size_t resident_size;
+  mach_vm_size_t resident_size_peak;
+  mach_vm_size_t device;
+  mach_vm_size_t device_peak;
+  mach_vm_size_t internal;
+  mach_vm_size_t internal_peak;
+  mach_vm_size_t external;
+  mach_vm_size_t external_peak;
+  mach_vm_size_t reusable;
+  mach_vm_size_t reusable_peak;
+  mach_vm_size_t purgeable_volatile_pmap;
+  mach_vm_size_t purgeable_volatile_resident;
+  mach_vm_size_t purgeable_volatile_virtual;
+  mach_vm_size_t compressed;
+  mach_vm_size_t compressed_peak;
+  mach_vm_size_t compressed_lifetime;
+  mach_vm_size_t phys_footprint;
+  mach_vm_address_t min_address;
+  mach_vm_address_t max_address;
+};
+#define __SANITIZER_TASK_VM_INFO_COUNT ((mach_msg_type_number_t) \
+    (sizeof(__sanitizer_task_vm_info) / sizeof(natural_t)))
+
+uptr GetTaskInfoMaxAddress() {
+  __sanitizer_task_vm_info vm_info = {};
+  mach_msg_type_number_t count = __SANITIZER_TASK_VM_INFO_COUNT;
+  int err = task_info(mach_task_self(), TASK_VM_INFO, (int *)&vm_info, &count);
+  if (err == 0) {
+    return vm_info.max_address - 1;
+  } else {
+    // xnu cannot provide vm address limit
+    return 0x200000000 - 1;
+  }
+}
+#endif
+
+uptr GetMaxVirtualAddress() {
+#if SANITIZER_WORDSIZE == 64
+# if defined(__aarch64__) && SANITIZER_IOS && !SANITIZER_IOSSIM
+  // Get the maximum VM address
+  static uptr max_vm = GetTaskInfoMaxAddress();
+  CHECK(max_vm);
+  return max_vm;
+# else
+  return (1ULL << 47) - 1;  // 0x00007fffffffffffUL;
+# endif
+#else  // SANITIZER_WORDSIZE == 32
+  return (1ULL << 32) - 1;  // 0xffffffff;
+#endif  // SANITIZER_WORDSIZE
+}
+
 uptr FindAvailableMemoryRange(uptr shadow_size,
                               uptr alignment,
-                              uptr left_padding) {
+                              uptr left_padding,
+                              uptr *largest_gap_found) {
   typedef vm_region_submap_short_info_data_64_t RegionInfo;
   enum { kRegionInfoSize = VM_REGION_SUBMAP_SHORT_INFO_COUNT_64 };
   // Start searching for available memory region past PAGEZERO, which is
@@ -778,6 +873,7 @@
   mach_vm_address_t address = start_address;
   mach_vm_address_t free_begin = start_address;
   kern_return_t kr = KERN_SUCCESS;
+  if (largest_gap_found) *largest_gap_found = 0;
   while (kr == KERN_SUCCESS) {
     mach_vm_size_t vmsize = 0;
     natural_t depth = 0;
@@ -787,10 +883,15 @@
                                 (vm_region_info_t)&vminfo, &count);
     if (free_begin != address) {
       // We found a free region [free_begin..address-1].
-      uptr shadow_address = RoundUpTo((uptr)free_begin + left_padding,
-                                      alignment);
-      if (shadow_address + shadow_size < (uptr)address) {
-        return shadow_address;
+      uptr gap_start = RoundUpTo((uptr)free_begin + left_padding, alignment);
+      uptr gap_end = RoundDownTo((uptr)address, alignment);
+      uptr gap_size = gap_end > gap_start ? gap_end - gap_start : 0;
+      if (shadow_size < gap_size) {
+        return gap_start;
+      }
+
+      if (largest_gap_found && *largest_gap_found < gap_size) {
+        *largest_gap_found = gap_size;
       }
     }
     // Move to the next region.
@@ -885,6 +986,15 @@
   Printf("End of module map.\n");
 }
 
+void CheckNoDeepBind(const char *filename, int flag) {
+  // Do nothing.
+}
+
+// FIXME: implement on this platform.
+bool GetRandom(void *buffer, uptr length) {
+  UNIMPLEMENTED();
+}
+
 }  // namespace __sanitizer
 
 #endif  // SANITIZER_MAC
diff --git a/lib/sanitizer_common/sanitizer_mac.h b/lib/sanitizer_common/sanitizer_mac.h
index 636d9bf..3f1c68c 100644
--- a/lib/sanitizer_common/sanitizer_mac.h
+++ b/lib/sanitizer_common/sanitizer_mac.h
@@ -36,6 +36,8 @@
 
 char **GetEnviron();
 
+void RestrictMemoryToMaxAddress(uptr max_address);
+
 }  // namespace __sanitizer
 
 extern "C" {
diff --git a/lib/sanitizer_common/sanitizer_mac_libcdep.cc b/lib/sanitizer_common/sanitizer_mac_libcdep.cc
new file mode 100644
index 0000000..c95daa9
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_mac_libcdep.cc
@@ -0,0 +1,30 @@
+//===-- sanitizer_mac_libcdep.cc ------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is shared between various sanitizers' runtime libraries and
+// implements OSX-specific functions.
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_platform.h"
+#if SANITIZER_MAC
+#include "sanitizer_mac.h"
+
+#include <sys/mman.h>
+
+namespace __sanitizer {
+
+void RestrictMemoryToMaxAddress(uptr max_address) {
+  uptr size_to_mmap = GetMaxVirtualAddress() + 1 - max_address;
+  void *res = MmapFixedNoAccess(max_address, size_to_mmap, "high gap");
+  CHECK(res != MAP_FAILED);
+}
+
+}  // namespace __sanitizer
+
+#endif  // SANITIZER_MAC
diff --git a/lib/sanitizer_common/sanitizer_malloc_mac.inc b/lib/sanitizer_common/sanitizer_malloc_mac.inc
index 6fbee07..5699c59 100644
--- a/lib/sanitizer_common/sanitizer_malloc_mac.inc
+++ b/lib/sanitizer_common/sanitizer_malloc_mac.inc
@@ -59,6 +59,9 @@
     uptr allocated_size = RoundUpTo(sizeof(sanitizer_zone), page_size);
     mprotect(zone, allocated_size, PROT_READ | PROT_WRITE);
   }
+  if (zone->zone_name) {
+    COMMON_MALLOC_FREE((void *)zone->zone_name);
+  }
   COMMON_MALLOC_FREE(zone);
 }
 
diff --git a/lib/sanitizer_common/sanitizer_mutex.h b/lib/sanitizer_common/sanitizer_mutex.h
index d06fc45..1759bf1 100644
--- a/lib/sanitizer_common/sanitizer_mutex.h
+++ b/lib/sanitizer_common/sanitizer_mutex.h
@@ -83,6 +83,14 @@
   BlockingMutex();
   void Lock();
   void Unlock();
+
+  // This function does not guarantee an explicit check that the calling thread
+  // is the thread which owns the mutex. This behavior, while more strictly
+  // correct, causes problems in cases like StopTheWorld, where a parent thread
+  // owns the mutex but a child checks that it is locked. Rather than
+  // maintaining complex state to work around those situations, the check only
+  // checks that the mutex is owned, and assumes callers to be generally
+  // well-behaved.
   void CheckLocked();
  private:
   uptr opaque_storage_[10];
diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h
index d9a8e8d..396f7c9 100644
--- a/lib/sanitizer_common/sanitizer_platform.h
+++ b/lib/sanitizer_common/sanitizer_platform.h
@@ -13,7 +13,7 @@
 #ifndef SANITIZER_PLATFORM_H
 #define SANITIZER_PLATFORM_H
 
-#if !defined(__linux__) && !defined(__FreeBSD__) && \
+#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && \
   !defined(__APPLE__) && !defined(_WIN32)
 # error "This operating system is not supported"
 #endif
@@ -30,6 +30,12 @@
 # define SANITIZER_FREEBSD 0
 #endif
 
+#if defined(__NetBSD__)
+# define SANITIZER_NETBSD 1
+#else
+# define SANITIZER_NETBSD 0
+#endif
+
 #if defined(__APPLE__)
 # define SANITIZER_MAC     1
 # include <TargetConditionals.h>
@@ -79,7 +85,8 @@
 # define SANITIZER_ANDROID 0
 #endif
 
-#define SANITIZER_POSIX (SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_MAC)
+#define SANITIZER_POSIX \
+  (SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_MAC || SANITIZER_NETBSD)
 
 #if __LP64__ || defined(_WIN64)
 #  define SANITIZER_WORDSIZE 64
@@ -162,6 +169,12 @@
 # define SANITIZER_PPC64V2 0
 #endif
 
+#if defined(__arm__)
+# define SANITIZER_ARM 1
+#else
+# define SANITIZER_ARM 0
+#endif
+
 // By default we allow to use SizeClassAllocator64 on 64-bit platform.
 // But in some cases (e.g. AArch64's 39-bit address space) SizeClassAllocator64
 // does not work well and we need to fallback to SizeClassAllocator32.
@@ -253,4 +266,15 @@
 # define SANITIZER_GO 0
 #endif
 
+// On PowerPC and ARM Thumb, calling pthread_exit() causes LSan to detect leaks.
+// pthread_exit() performs unwinding that leads to dlopen'ing libgcc_s.so.
+// dlopen mallocs "libgcc_s.so" string which confuses LSan, it fails to realize
+// that this allocation happens in dynamic linker and should be ignored.
+#if SANITIZER_PPC || defined(__thumb__)
+# define SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT 1
+#else
+# define SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT 0
+#endif
+
+
 #endif // SANITIZER_PLATFORM_H
diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h
index 62875d1..0380cee 100644
--- a/lib/sanitizer_common/sanitizer_platform_interceptors.h
+++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h
@@ -17,12 +17,20 @@
 #include "sanitizer_internal_defs.h"
 
 #if !SANITIZER_WINDOWS
+# define SI_WINDOWS 0
 # define SI_NOT_WINDOWS 1
 # include "sanitizer_platform_limits_posix.h"
 #else
+# define SI_WINDOWS 1
 # define SI_NOT_WINDOWS 0
 #endif
 
+#if SANITIZER_POSIX
+# define SI_POSIX 1
+#else
+# define SI_POSIX 0
+#endif
+
 #if SANITIZER_LINUX && !SANITIZER_ANDROID
 # define SI_LINUX_NOT_ANDROID 1
 #else
@@ -41,6 +49,12 @@
 # define SI_FREEBSD 0
 #endif
 
+#if SANITIZER_NETBSD
+# define SI_NETBSD 1
+#else
+# define SI_NETBSD 0
+#endif
+
 #if SANITIZER_LINUX
 # define SI_LINUX 1
 #else
@@ -67,11 +81,18 @@
 # define SI_UNIX_NOT_MAC 0
 #endif
 
+#if SANITIZER_LINUX && !SANITIZER_FREEBSD
+# define SI_LINUX_NOT_FREEBSD 1
+# else
+# define SI_LINUX_NOT_FREEBSD 0
+#endif
+
 #define SANITIZER_INTERCEPT_STRLEN 1
 #define SANITIZER_INTERCEPT_STRNLEN SI_NOT_MAC
 #define SANITIZER_INTERCEPT_STRCMP 1
 #define SANITIZER_INTERCEPT_STRSTR 1
 #define SANITIZER_INTERCEPT_STRCASESTR SI_NOT_WINDOWS
+#define SANITIZER_INTERCEPT_STRTOK 1
 #define SANITIZER_INTERCEPT_STRCHR 1
 #define SANITIZER_INTERCEPT_STRCHRNUL SI_UNIX_NOT_MAC
 #define SANITIZER_INTERCEPT_STRRCHR 1
@@ -83,23 +104,37 @@
 #define SANITIZER_INTERCEPT_MEMMOVE 1
 #define SANITIZER_INTERCEPT_MEMCPY 1
 #define SANITIZER_INTERCEPT_MEMCMP 1
+#define SANITIZER_INTERCEPT_STRNDUP SI_POSIX
+#define SANITIZER_INTERCEPT___STRNDUP SI_LINUX_NOT_FREEBSD
+#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
+    __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070
+# define SI_MAC_DEPLOYMENT_BELOW_10_7 1
+#else
+# define SI_MAC_DEPLOYMENT_BELOW_10_7 0
+#endif
+// memmem on Darwin doesn't exist on 10.6
 // FIXME: enable memmem on Windows.
-#define SANITIZER_INTERCEPT_MEMMEM SI_NOT_WINDOWS
+#define SANITIZER_INTERCEPT_MEMMEM \
+  (SI_NOT_WINDOWS && !SI_MAC_DEPLOYMENT_BELOW_10_7)
 #define SANITIZER_INTERCEPT_MEMCHR 1
-#define SANITIZER_INTERCEPT_MEMRCHR SI_FREEBSD || SI_LINUX
+#define SANITIZER_INTERCEPT_MEMRCHR (SI_FREEBSD || SI_LINUX || SI_NETBSD)
 
 #define SANITIZER_INTERCEPT_READ   SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PREAD  SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_WRITE  SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PWRITE SI_NOT_WINDOWS
 
+#define SANITIZER_INTERCEPT_FREAD SI_NOT_WINDOWS
+#define SANITIZER_INTERCEPT_FWRITE SI_NOT_WINDOWS
+
 #define SANITIZER_INTERCEPT_PREAD64 SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PWRITE64 SI_LINUX_NOT_ANDROID
 
 #define SANITIZER_INTERCEPT_READV SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_WRITEV SI_NOT_WINDOWS
 
-#define SANITIZER_INTERCEPT_PREADV SI_FREEBSD || SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_PREADV \
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_PWRITEV SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PREADV64 SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PWRITEV64 SI_LINUX_NOT_ANDROID
@@ -114,7 +149,7 @@
 
 #ifndef SANITIZER_INTERCEPT_PRINTF
 # define SANITIZER_INTERCEPT_PRINTF SI_NOT_WINDOWS
-# define SANITIZER_INTERCEPT_PRINTF_L SI_FREEBSD
+# define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD)
 # define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_LINUX_NOT_ANDROID
 #endif
 
@@ -123,13 +158,14 @@
 
 #define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_GETPWENT \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_FGETPWENT SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_GETPWENT_R SI_FREEBSD || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_SETPWENT SI_MAC || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_CLOCK_GETTIME SI_FREEBSD || SI_LINUX
+#define SANITIZER_INTERCEPT_GETPWENT_R \
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_SETPWENT (SI_MAC || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_CLOCK_GETTIME (SI_FREEBSD || SI_NETBSD || SI_LINUX)
 #define SANITIZER_INTERCEPT_GETITIMER SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_TIME SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_GLOB SI_LINUX_NOT_ANDROID
@@ -140,10 +176,11 @@
 #define SANITIZER_INTERCEPT_GETNAMEINFO SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_GETSOCKNAME SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_GETHOSTBYNAME SI_NOT_WINDOWS
-#define SANITIZER_INTERCEPT_GETHOSTBYNAME_R SI_FREEBSD || SI_LINUX
-#define SANITIZER_INTERCEPT_GETHOSTBYNAME2_R SI_FREEBSD || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_GETHOSTBYADDR_R SI_FREEBSD || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_GETHOSTENT_R SI_FREEBSD || SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_GETHOSTBYNAME_R (SI_FREEBSD || SI_LINUX)
+#define SANITIZER_INTERCEPT_GETHOSTBYNAME2_R \
+  (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_GETHOSTBYADDR_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_GETHOSTENT_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_GETSOCKOPT SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_ACCEPT SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_ACCEPT4 SI_LINUX_NOT_ANDROID
@@ -169,63 +206,67 @@
 #define SANITIZER_INTERCEPT_GET_CURRENT_DIR_NAME SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_STRTOIMAX SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_MBSTOWCS SI_NOT_WINDOWS
-#define SANITIZER_INTERCEPT_MBSNRTOWCS SI_MAC || SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_MBSNRTOWCS (SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_WCSTOMBS SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_WCSNRTOMBS \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_WCRTOMB \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_TCGETATTR SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_REALPATH SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_CANONICALIZE_FILE_NAME SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_CONFSTR \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_SCHED_GETAFFINITY SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_SCHED_GETPARAM SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_STRERROR SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_STRERROR_R SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_XPG_STRERROR_R SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_SCANDIR \
-  SI_FREEBSD || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_SCANDIR64 SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_GETGROUPS SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_POLL SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PPOLL SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_WORDEXP \
-  SI_FREEBSD || (SI_MAC && !SI_IOS) || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || (SI_MAC && !SI_IOS) || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_SIGWAIT SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_SIGWAITINFO SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_SIGTIMEDWAIT SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_SIGSETOPS \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_SIGPENDING SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_SIGPROCMASK SI_NOT_WINDOWS
-#define SANITIZER_INTERCEPT_BACKTRACE SI_FREEBSD || SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_BACKTRACE \
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_GETMNTENT SI_LINUX
 #define SANITIZER_INTERCEPT_GETMNTENT_R SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_STATFS SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_STATFS \
+  (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_STATFS64 \
-  (SI_MAC && !SI_IOS) || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_STATVFS SI_FREEBSD || SI_LINUX_NOT_ANDROID
+  ((SI_MAC && !SI_IOS) || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_STATVFS \
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_STATVFS64 SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_INITGROUPS SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_ETHER_NTOA_ATON SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_ETHER_HOST \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_ETHER_R SI_FREEBSD || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_SHMCTL \
-  ((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && SANITIZER_WORDSIZE == 64)
+  (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_ETHER_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_SHMCTL                       \
+  (SI_NETBSD || ((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && \
+                 SANITIZER_WORDSIZE == 64))  // NOLINT
 #define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPSHARED SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETTYPE SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPROTOCOL \
-  SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_MAC || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETPRIOCEILING \
-  SI_MAC || SI_LINUX_NOT_ANDROID
+  (SI_MAC || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PTHREAD_MUTEXATTR_GETROBUST_NP SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_PTHREAD_RWLOCKATTR_GETPSHARED SI_NOT_WINDOWS
@@ -240,33 +281,36 @@
 #define SANITIZER_INTERCEPT_SINCOS SI_LINUX
 #define SANITIZER_INTERCEPT_REMQUO SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_LGAMMA SI_NOT_WINDOWS
-#define SANITIZER_INTERCEPT_LGAMMA_R SI_FREEBSD || SI_LINUX
+#define SANITIZER_INTERCEPT_LGAMMA_R (SI_FREEBSD || SI_LINUX)
 #define SANITIZER_INTERCEPT_LGAMMAL_R SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_DRAND48_R SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_RAND_R \
-  SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_ICONV SI_FREEBSD || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID)
+#define SANITIZER_INTERCEPT_ICONV \
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 #define SANITIZER_INTERCEPT_TIMES SI_NOT_WINDOWS
 
 // FIXME: getline seems to be available on OSX 10.7
-#define SANITIZER_INTERCEPT_GETLINE SI_FREEBSD || SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_GETLINE \
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 
-#define SANITIZER_INTERCEPT__EXIT SI_LINUX || SI_FREEBSD || SI_MAC
+#define SANITIZER_INTERCEPT__EXIT \
+  (SI_LINUX || SI_FREEBSD || SI_NETBSD || SI_MAC)
 
 #define SANITIZER_INTERCEPT_PHTREAD_MUTEX SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_PTHREAD_SETNAME_NP \
-  SI_FREEBSD || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 
 #define SANITIZER_INTERCEPT_TLS_GET_ADDR \
-  SI_FREEBSD || SI_LINUX_NOT_ANDROID
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
 
 #define SANITIZER_INTERCEPT_LISTXATTR SI_LINUX
 #define SANITIZER_INTERCEPT_GETXATTR SI_LINUX
 #define SANITIZER_INTERCEPT_GETRESID SI_LINUX
 #define SANITIZER_INTERCEPT_GETIFADDRS \
-  SI_FREEBSD || SI_LINUX_NOT_ANDROID || SI_MAC
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID || SI_MAC)
 #define SANITIZER_INTERCEPT_IF_INDEXTONAME \
-  SI_FREEBSD || SI_LINUX_NOT_ANDROID || SI_MAC
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID || SI_MAC)
 #define SANITIZER_INTERCEPT_CAPGET SI_LINUX_NOT_ANDROID
 #if SI_LINUX && defined(__arm__)
 #define SANITIZER_INTERCEPT_AEABI_MEM 1
@@ -274,51 +318,64 @@
 #define SANITIZER_INTERCEPT_AEABI_MEM 0
 #endif
 #define SANITIZER_INTERCEPT___BZERO SI_MAC
-#define SANITIZER_INTERCEPT_FTIME !SI_FREEBSD && SI_NOT_WINDOWS
+#define SANITIZER_INTERCEPT_FTIME (!SI_FREEBSD && !SI_NETBSD && SI_NOT_WINDOWS)
 #define SANITIZER_INTERCEPT_XDR SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_TSEARCH SI_LINUX_NOT_ANDROID || SI_MAC
+#define SANITIZER_INTERCEPT_TSEARCH \
+  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_NETBSD)
 #define SANITIZER_INTERCEPT_LIBIO_INTERNALS SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_FOPEN SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_FOPEN64 SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_OPEN_MEMSTREAM SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_OPEN_MEMSTREAM (SI_LINUX_NOT_ANDROID || SI_NETBSD)
 #define SANITIZER_INTERCEPT_OBSTACK SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT_FFLUSH SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_FCLOSE SI_NOT_WINDOWS
 
 #ifndef SANITIZER_INTERCEPT_DLOPEN_DLCLOSE
 #define SANITIZER_INTERCEPT_DLOPEN_DLCLOSE \
-    SI_FREEBSD || SI_LINUX_NOT_ANDROID || SI_MAC
+  (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID || SI_MAC)
 #endif
 
-#define SANITIZER_INTERCEPT_GETPASS SI_LINUX_NOT_ANDROID || SI_MAC
+#define SANITIZER_INTERCEPT_GETPASS \
+  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_NETBSD)
 #define SANITIZER_INTERCEPT_TIMERFD SI_LINUX_NOT_ANDROID
 
 #define SANITIZER_INTERCEPT_MLOCKX SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_FOPENCOOKIE SI_LINUX_NOT_ANDROID
-#define SANITIZER_INTERCEPT_SEM SI_LINUX || SI_FREEBSD
+#define SANITIZER_INTERCEPT_SEM (SI_LINUX || SI_FREEBSD || SI_NETBSD)
 #define SANITIZER_INTERCEPT_PTHREAD_SETCANCEL SI_NOT_WINDOWS
-#define SANITIZER_INTERCEPT_MINCORE SI_LINUX
+#define SANITIZER_INTERCEPT_MINCORE (SI_LINUX || SI_NETBSD)
 #define SANITIZER_INTERCEPT_PROCESS_VM_READV SI_LINUX
-#define SANITIZER_INTERCEPT_CTERMID SI_LINUX || SI_MAC || SI_FREEBSD
-#define SANITIZER_INTERCEPT_CTERMID_R SI_MAC || SI_FREEBSD
+#define SANITIZER_INTERCEPT_CTERMID \
+  (SI_LINUX || SI_MAC || SI_FREEBSD || SI_NETBSD)
+#define SANITIZER_INTERCEPT_CTERMID_R (SI_MAC || SI_FREEBSD)
 
-#define SANITIZER_INTERCEPTOR_HOOKS SI_LINUX
+#define SANITIZER_INTERCEPTOR_HOOKS (SI_LINUX || SI_MAC || SI_WINDOWS)
 #define SANITIZER_INTERCEPT_RECV_RECVFROM SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_SEND_SENDTO SI_NOT_WINDOWS
 #define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE SI_LINUX
 
-#define SANITIZER_INTERCEPT_STAT (SI_FREEBSD || SI_MAC || SI_ANDROID)
-#define SANITIZER_INTERCEPT___XSTAT !SANITIZER_INTERCEPT_STAT && SI_NOT_WINDOWS
+#define SANITIZER_INTERCEPT_STAT \
+  (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD)
+#define SANITIZER_INTERCEPT___XSTAT \
+  (!SANITIZER_INTERCEPT_STAT && SI_NOT_WINDOWS)
 #define SANITIZER_INTERCEPT___XSTAT64 SI_LINUX_NOT_ANDROID
 #define SANITIZER_INTERCEPT___LXSTAT SANITIZER_INTERCEPT___XSTAT
 #define SANITIZER_INTERCEPT___LXSTAT64 SI_LINUX_NOT_ANDROID
 
-#define SANITIZER_INTERCEPT_UTMP SI_NOT_WINDOWS && !SI_MAC && !SI_FREEBSD
-#define SANITIZER_INTERCEPT_UTMPX SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD
+#define SANITIZER_INTERCEPT_UTMP (SI_NOT_WINDOWS && !SI_MAC && !SI_FREEBSD)
+#define SANITIZER_INTERCEPT_UTMPX (SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD)
 
-#define SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO (!SI_FREEBSD && !SI_MAC)
-#define SANITIZER_INTERCEPT_MEMALIGN (!SI_FREEBSD && !SI_MAC)
-#define SANITIZER_INTERCEPT_PVALLOC (!SI_FREEBSD && !SI_MAC)
-#define SANITIZER_INTERCEPT_CFREE (!SI_FREEBSD && !SI_MAC)
+#define SANITIZER_INTERCEPT_GETLOADAVG \
+  (SI_LINUX_NOT_ANDROID || SI_MAC || SI_FREEBSD || SI_NETBSD)
+
+#define SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO \
+  (!SI_FREEBSD && !SI_MAC && !SI_NETBSD)
+#define SANITIZER_INTERCEPT_MEMALIGN (!SI_FREEBSD && !SI_MAC && !SI_NETBSD)
+#define SANITIZER_INTERCEPT_PVALLOC (!SI_FREEBSD && !SI_MAC && !SI_NETBSD)
+#define SANITIZER_INTERCEPT_CFREE (!SI_FREEBSD && !SI_MAC && !SI_NETBSD)
+#define SANITIZER_INTERCEPT_ALIGNED_ALLOC (!SI_MAC)
+#define SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE (!SI_MAC)
+#define SANITIZER_INTERCEPT_MCHECK_MPROBE SI_LINUX_NOT_ANDROID
+#define SANITIZER_INTERCEPT_WCSCAT SI_NOT_WINDOWS
 
 #endif  // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
index 683f019..83f4fd2 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
@@ -25,7 +25,6 @@
 #endif
 #include <arpa/inet.h>
 #include <dirent.h>
-#include <errno.h>
 #include <grp.h>
 #include <limits.h>
 #include <net/if.h>
@@ -931,14 +930,6 @@
   unsigned IOCTL_SNDCTL_DSP_GETOSPACE = SNDCTL_DSP_GETOSPACE;
 #endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
 
-  const int errno_EINVAL = EINVAL;
-// EOWNERDEAD is not present in some older platforms.
-#if defined(EOWNERDEAD)
-  const int errno_EOWNERDEAD = EOWNERDEAD;
-#else
-  const int errno_EOWNERDEAD = -1;
-#endif
-
   const int si_SEGV_MAPERR = SEGV_MAPERR;
   const int si_SEGV_ACCERR = SEGV_ACCERR;
 } // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/lib/sanitizer_common/sanitizer_platform_limits_posix.h
index c2d9f2c..63dcd2a 100644
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.h
@@ -23,6 +23,9 @@
 // incorporates the map structure.
 # define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) \
     ((link_map*)((handle) == nullptr ? nullptr : ((char*)(handle) + 544)))
+// Get sys/_types.h, because that tells us whether 64-bit inodes are
+// used in struct dirent below.
+#include <sys/_types.h>
 #else
 # define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle))
 #endif  // !SANITIZER_FREEBSD
@@ -83,7 +86,7 @@
 #elif defined(__mips__)
   const unsigned struct_kernel_stat_sz =
                  SANITIZER_ANDROID ? FIRST_32_SECOND_64(104, 128) :
-                                     FIRST_32_SECOND_64(144, 216);
+                                     FIRST_32_SECOND_64(160, 216);
   const unsigned struct_kernel_stat64_sz = 104;
 #elif defined(__s390__) && !defined(__s390x__)
   const unsigned struct_kernel_stat_sz = 64;
@@ -485,7 +488,12 @@
   };
 #elif SANITIZER_FREEBSD
   struct __sanitizer_dirent {
+#if defined(__INO64)
+    unsigned long long d_fileno;
+    unsigned long long d_off;
+#else
     unsigned int d_fileno;
+#endif
     unsigned short d_reclen;
     // more fields that we don't care about
   };
@@ -1456,9 +1464,6 @@
   extern unsigned IOCTL_PIO_SCRNMAP;
 #endif
 
-  extern const int errno_EINVAL;
-  extern const int errno_EOWNERDEAD;
-
   extern const int si_SEGV_MAPERR;
   extern const int si_SEGV_ACCERR;
 }  // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_posix.cc b/lib/sanitizer_common/sanitizer_posix.cc
index c70d5a4..8d3128a 100644
--- a/lib/sanitizer_common/sanitizer_posix.cc
+++ b/lib/sanitizer_common/sanitizer_posix.cc
@@ -22,18 +22,11 @@
 #include "sanitizer_procmaps.h"
 #include "sanitizer_stacktrace.h"
 
+#include <errno.h>
 #include <fcntl.h>
 #include <signal.h>
 #include <sys/mman.h>
 
-#if SANITIZER_LINUX
-#include <sys/utsname.h>
-#endif
-
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
-#include <sys/personality.h>
-#endif
-
 #if SANITIZER_FREEBSD
 // The MAP_NORESERVE define has been removed in FreeBSD 11.x, and even before
 // that, it was never implemented.  So just define it to zero.
@@ -48,87 +41,13 @@
   return GetPageSize();
 }
 
-#if SANITIZER_WORDSIZE == 32
-// Take care of unusable kernel area in top gigabyte.
-static uptr GetKernelAreaSize() {
-#if SANITIZER_LINUX && !SANITIZER_X32
-  const uptr gbyte = 1UL << 30;
-
-  // Firstly check if there are writable segments
-  // mapped to top gigabyte (e.g. stack).
-  MemoryMappingLayout proc_maps(/*cache_enabled*/true);
-  uptr end, prot;
-  while (proc_maps.Next(/*start*/nullptr, &end,
-                        /*offset*/nullptr, /*filename*/nullptr,
-                        /*filename_size*/0, &prot)) {
-    if ((end >= 3 * gbyte)
-        && (prot & MemoryMappingLayout::kProtectionWrite) != 0)
-      return 0;
-  }
-
-#if !SANITIZER_ANDROID
-  // Even if nothing is mapped, top Gb may still be accessible
-  // if we are running on 64-bit kernel.
-  // Uname may report misleading results if personality type
-  // is modified (e.g. under schroot) so check this as well.
-  struct utsname uname_info;
-  int pers = personality(0xffffffffUL);
-  if (!(pers & PER_MASK)
-      && uname(&uname_info) == 0
-      && internal_strstr(uname_info.machine, "64"))
-    return 0;
-#endif  // SANITIZER_ANDROID
-
-  // Top gigabyte is reserved for kernel.
-  return gbyte;
-#else
-  return 0;
-#endif  // SANITIZER_LINUX && !SANITIZER_X32
-}
-#endif  // SANITIZER_WORDSIZE == 32
-
-uptr GetMaxVirtualAddress() {
-#if SANITIZER_WORDSIZE == 64
-# if defined(__aarch64__) && SANITIZER_IOS && !SANITIZER_IOSSIM
-  // Ideally, we would derive the upper bound from MACH_VM_MAX_ADDRESS. The
-  // upper bound can change depending on the device.
-  return 0x200000000 - 1;
-# elif defined(__powerpc64__) || defined(__aarch64__)
-  // On PowerPC64 we have two different address space layouts: 44- and 46-bit.
-  // We somehow need to figure out which one we are using now and choose
-  // one of 0x00000fffffffffffUL and 0x00003fffffffffffUL.
-  // Note that with 'ulimit -s unlimited' the stack is moved away from the top
-  // of the address space, so simply checking the stack address is not enough.
-  // This should (does) work for both PowerPC64 Endian modes.
-  // Similarly, aarch64 has multiple address space layouts: 39, 42 and 47-bit.
-  return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1;
-# elif defined(__mips64)
-  return (1ULL << 40) - 1;  // 0x000000ffffffffffUL;
-# elif defined(__s390x__)
-  return (1ULL << 53) - 1;  // 0x001fffffffffffffUL;
-# else
-  return (1ULL << 47) - 1;  // 0x00007fffffffffffUL;
-# endif
-#else  // SANITIZER_WORDSIZE == 32
-# if defined(__s390__)
-  return (1ULL << 31) - 1;  // 0x7fffffff;
-# else
-  uptr res = (1ULL << 32) - 1;  // 0xffffffff;
-  if (!common_flags()->full_address_space)
-    res -= GetKernelAreaSize();
-  CHECK_LT(reinterpret_cast<uptr>(&res), res);
-  return res;
-# endif
-#endif  // SANITIZER_WORDSIZE
-}
-
 void *MmapOrDie(uptr size, const char *mem_type, bool raw_report) {
   size = RoundUpTo(size, GetPageSizeCached());
   uptr res = internal_mmap(nullptr, size,
                            PROT_READ | PROT_WRITE,
                            MAP_PRIVATE | MAP_ANON, -1, 0);
   int reserrno;
-  if (internal_iserror(res, &reserrno))
+  if (UNLIKELY(internal_iserror(res, &reserrno)))
     ReportMmapFailureAndDie(size, mem_type, "allocate", reserrno, raw_report);
   IncreaseTotalMmap(size);
   return (void *)res;
@@ -137,7 +56,7 @@
 void UnmapOrDie(void *addr, uptr size) {
   if (!addr || !size) return;
   uptr res = internal_munmap(addr, size);
-  if (internal_iserror(res)) {
+  if (UNLIKELY(internal_iserror(res))) {
     Report("ERROR: %s failed to deallocate 0x%zx (%zd) bytes at address %p\n",
            SanitizerToolName, size, size, addr);
     CHECK("unable to unmap" && 0);
@@ -145,21 +64,39 @@
   DecreaseTotalMmap(size);
 }
 
+void *MmapOrDieOnFatalError(uptr size, const char *mem_type) {
+  size = RoundUpTo(size, GetPageSizeCached());
+  uptr res = internal_mmap(nullptr, size,
+                           PROT_READ | PROT_WRITE,
+                           MAP_PRIVATE | MAP_ANON, -1, 0);
+  int reserrno;
+  if (UNLIKELY(internal_iserror(res, &reserrno))) {
+    if (reserrno == ENOMEM)
+      return nullptr;
+    ReportMmapFailureAndDie(size, mem_type, "allocate", reserrno);
+  }
+  IncreaseTotalMmap(size);
+  return (void *)res;
+}
+
 // We want to map a chunk of address space aligned to 'alignment'.
-// We do it by maping a bit more and then unmaping redundant pieces.
+// We do it by mapping a bit more and then unmapping redundant pieces.
 // We probably can do it with fewer syscalls in some OS-dependent way.
-void *MmapAlignedOrDie(uptr size, uptr alignment, const char *mem_type) {
+void *MmapAlignedOrDieOnFatalError(uptr size, uptr alignment,
+                                   const char *mem_type) {
   CHECK(IsPowerOfTwo(size));
   CHECK(IsPowerOfTwo(alignment));
   uptr map_size = size + alignment;
-  uptr map_res = (uptr)MmapOrDie(map_size, mem_type);
+  uptr map_res = (uptr)MmapOrDieOnFatalError(map_size, mem_type);
+  if (UNLIKELY(!map_res))
+    return nullptr;
   uptr map_end = map_res + map_size;
   uptr res = map_res;
-  if (res & (alignment - 1))  // Not aligned.
-    res = (map_res + alignment) & ~(alignment - 1);
-  uptr end = res + size;
-  if (res != map_res)
+  if (!IsAligned(res, alignment)) {
+    res = (map_res + alignment - 1) & ~(alignment - 1);
     UnmapOrDie((void*)map_res, res - map_res);
+  }
+  uptr end = res + size;
   if (end != map_end)
     UnmapOrDie((void*)end, map_end - end);
   return (void*)res;
@@ -173,13 +110,13 @@
                          MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
                          -1, 0);
   int reserrno;
-  if (internal_iserror(p, &reserrno))
+  if (UNLIKELY(internal_iserror(p, &reserrno)))
     ReportMmapFailureAndDie(size, mem_type, "allocate noreserve", reserrno);
   IncreaseTotalMmap(size);
   return (void *)p;
 }
 
-void *MmapFixedOrDie(uptr fixed_addr, uptr size) {
+void *MmapFixedImpl(uptr fixed_addr, uptr size, bool tolerate_enomem) {
   uptr PageSize = GetPageSizeCached();
   uptr p = internal_mmap((void*)(fixed_addr & ~(PageSize - 1)),
       RoundUpTo(size, PageSize),
@@ -187,8 +124,10 @@
       MAP_PRIVATE | MAP_ANON | MAP_FIXED,
       -1, 0);
   int reserrno;
-  if (internal_iserror(p, &reserrno)) {
-    char mem_type[30];
+  if (UNLIKELY(internal_iserror(p, &reserrno))) {
+    if (tolerate_enomem && reserrno == ENOMEM)
+      return nullptr;
+    char mem_type[40];
     internal_snprintf(mem_type, sizeof(mem_type), "memory at address 0x%zx",
                       fixed_addr);
     ReportMmapFailureAndDie(size, mem_type, "allocate", reserrno);
@@ -197,6 +136,14 @@
   return (void *)p;
 }
 
+void *MmapFixedOrDie(uptr fixed_addr, uptr size) {
+  return MmapFixedImpl(fixed_addr, size, false /*tolerate_enomem*/);
+}
+
+void *MmapFixedOrDieOnFatalError(uptr fixed_addr, uptr size) {
+  return MmapFixedImpl(fixed_addr, size, true /*tolerate_enomem*/);
+}
+
 bool MprotectNoAccess(uptr addr, uptr size) {
   return 0 == internal_mprotect((void*)addr, size, PROT_NONE);
 }
@@ -284,13 +231,12 @@
 // memory).
 bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
   MemoryMappingLayout proc_maps(/*cache_enabled*/true);
-  uptr start, end;
-  while (proc_maps.Next(&start, &end,
-                        /*offset*/nullptr, /*filename*/nullptr,
-                        /*filename_size*/0, /*protection*/nullptr)) {
-    if (start == end) continue;  // Empty range.
-    CHECK_NE(0, end);
-    if (!IntervalsAreSeparate(start, end - 1, range_start, range_end))
+  MemoryMappedSegment segment;
+  while (proc_maps.Next(&segment)) {
+    if (segment.start == segment.end) continue;  // Empty range.
+    CHECK_NE(0, segment.end);
+    if (!IntervalsAreSeparate(segment.start, segment.end - 1, range_start,
+                              range_end))
       return false;
   }
   return true;
@@ -298,13 +244,13 @@
 
 void DumpProcessMap() {
   MemoryMappingLayout proc_maps(/*cache_enabled*/true);
-  uptr start, end;
   const sptr kBufSize = 4095;
   char *filename = (char*)MmapOrDie(kBufSize, __func__);
+  MemoryMappedSegment segment(filename, kBufSize);
   Report("Process memory map follows:\n");
-  while (proc_maps.Next(&start, &end, /* file_offset */nullptr,
-                        filename, kBufSize, /* protection */nullptr)) {
-    Printf("\t%p-%p\t%s\n", (void*)start, (void*)end, filename);
+  while (proc_maps.Next(&segment)) {
+    Printf("\t%p-%p\t%s\n", (void *)segment.start, (void *)segment.end,
+           segment.filename);
   }
   Report("End of process memory map.\n");
   UnmapOrDie(filename, kBufSize);
@@ -334,14 +280,14 @@
 }
 
 bool GetCodeRangeForFile(const char *module, uptr *start, uptr *end) {
-  uptr s, e, off, prot;
-  InternalScopedString buff(kMaxPathLength);
   MemoryMappingLayout proc_maps(/*cache_enabled*/false);
-  while (proc_maps.Next(&s, &e, &off, buff.data(), buff.size(), &prot)) {
-    if ((prot & MemoryMappingLayout::kProtectionExecute) != 0
-        && internal_strcmp(module, buff.data()) == 0) {
-      *start = s;
-      *end = e;
+  InternalScopedString buff(kMaxPathLength);
+  MemoryMappedSegment segment(buff.data(), kMaxPathLength);
+  while (proc_maps.Next(&segment)) {
+    if (segment.IsExecutable() &&
+        internal_strcmp(module, segment.filename) == 0) {
+      *start = segment.start;
+      *end = segment.end;
       return true;
     }
   }
@@ -358,6 +304,22 @@
   return SignalContext(context, addr, pc, sp, bp, is_memory_access, write_flag);
 }
 
+const char *DescribeSignalOrException(int signo) {
+  switch (signo) {
+    case SIGFPE:
+      return "FPE";
+    case SIGILL:
+      return "ILL";
+    case SIGABRT:
+      return "ABRT";
+    case SIGSEGV:
+      return "SEGV";
+    case SIGBUS:
+      return "BUS";
+  }
+  return "UNKNOWN SIGNAL";
+}
+
 } // namespace __sanitizer
 
 #endif // SANITIZER_POSIX
diff --git a/lib/sanitizer_common/sanitizer_posix.h b/lib/sanitizer_common/sanitizer_posix.h
index 7f862cd..e7d37cb 100644
--- a/lib/sanitizer_common/sanitizer_posix.h
+++ b/lib/sanitizer_common/sanitizer_posix.h
@@ -87,6 +87,9 @@
 
 uptr internal_execve(const char *filename, char *const argv[],
                      char *const envp[]);
+
+bool IsStateDetached(int state);
+
 }  // namespace __sanitizer
 
 #endif  // SANITIZER_POSIX_H
diff --git a/lib/sanitizer_common/sanitizer_posix_libcdep.cc b/lib/sanitizer_common/sanitizer_posix_libcdep.cc
index dd62140..e113fb1 100644
--- a/lib/sanitizer_common/sanitizer_posix_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_posix_libcdep.cc
@@ -134,7 +134,8 @@
 void Abort() {
 #if !SANITIZER_GO
   // If we are handling SIGABRT, unhandle it first.
-  if (IsHandledDeadlySignal(SIGABRT)) {
+  // TODO(vitalybuka): Check if handler belongs to sanitizer.
+  if (GetHandleSignalMode(SIGABRT) != kHandleSignalNo) {
     struct sigaction sigact;
     internal_memset(&sigact, 0, sizeof(sigact));
     sigact.sa_sigaction = (sa_sigaction_t)SIG_DFL;
@@ -188,8 +189,8 @@
 
 static void MaybeInstallSigaction(int signum,
                                   SignalHandlerType handler) {
-  if (!IsHandledDeadlySignal(signum))
-    return;
+  if (GetHandleSignalMode(signum) == kHandleSignalNo) return;
+
   struct sigaction sigact;
   internal_memset(&sigact, 0, sizeof(sigact));
   sigact.sa_sigaction = (sa_sigaction_t)handler;
@@ -245,7 +246,6 @@
   // Same for /proc/self/exe in the symbolizer.
 #if !SANITIZER_GO
   Symbolizer::GetOrInit()->PrepareForSandboxing();
-  CovPrepareForSandboxing(args);
 #endif
 }
 
@@ -418,6 +418,10 @@
   return process_status;
 }
 
+bool IsStateDetached(int state) {
+  return state == PTHREAD_CREATE_DETACHED;
+}
+
 } // namespace __sanitizer
 
 #endif // SANITIZER_POSIX
diff --git a/lib/sanitizer_common/sanitizer_printf.cc b/lib/sanitizer_common/sanitizer_printf.cc
index c8317be..99b7ff1 100644
--- a/lib/sanitizer_common/sanitizer_printf.cc
+++ b/lib/sanitizer_common/sanitizer_printf.cc
@@ -214,15 +214,11 @@
 }
 
 // Can be overriden in frontend.
-#if SANITIZER_SUPPORTS_WEAK_HOOKS
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-void OnPrint(const char *str) {
-  (void)str;
-}
-#elif SANITIZER_GO && defined(TSAN_EXTERNAL_HOOKS)
-void OnPrint(const char *str);
+#if SANITIZER_GO && defined(TSAN_EXTERNAL_HOOKS)
+// Implementation must be defined in frontend.
+extern "C" void OnPrint(const char *str);
 #else
-void OnPrint(const char *str) {
+SANITIZER_INTERFACE_WEAK_DEF(void, OnPrint, const char *str) {
   (void)str;
 }
 #endif
diff --git a/lib/sanitizer_common/sanitizer_procmaps.h b/lib/sanitizer_common/sanitizer_procmaps.h
index 9dbb5ef..06d072b 100644
--- a/lib/sanitizer_common/sanitizer_procmaps.h
+++ b/lib/sanitizer_common/sanitizer_procmaps.h
@@ -31,13 +31,37 @@
 void ReadProcMaps(ProcSelfMapsBuff *proc_maps);
 #endif  // SANITIZER_FREEBSD || SANITIZER_LINUX
 
+// Memory protection masks.
+static const uptr kProtectionRead = 1;
+static const uptr kProtectionWrite = 2;
+static const uptr kProtectionExecute = 4;
+static const uptr kProtectionShared = 8;
+
+struct MemoryMappedSegment {
+  MemoryMappedSegment(char *buff = nullptr, uptr size = 0)
+      : filename(buff), filename_size(size) {}
+  ~MemoryMappedSegment() {}
+
+  bool IsReadable() { return protection & kProtectionRead; }
+  bool IsWritable() { return protection & kProtectionWrite; }
+  bool IsExecutable() { return protection & kProtectionExecute; }
+  bool IsShared() { return protection & kProtectionShared; }
+
+  uptr start;
+  uptr end;
+  uptr offset;
+  char *filename;  // owned by caller
+  uptr filename_size;
+  uptr protection;
+  ModuleArch arch;
+  u8 uuid[kModuleUUIDSize];
+};
+
 class MemoryMappingLayout {
  public:
   explicit MemoryMappingLayout(bool cache_enabled);
   ~MemoryMappingLayout();
-  bool Next(uptr *start, uptr *end, uptr *offset, char filename[],
-            uptr filename_size, uptr *protection, ModuleArch *arch = nullptr,
-            u8 *uuid = nullptr);
+  bool Next(MemoryMappedSegment *segment);
   void Reset();
   // In some cases, e.g. when running under a sandbox on Linux, ASan is unable
   // to obtain the memory mappings. It should fall back to pre-cached data
@@ -47,12 +71,6 @@
   // Adds all mapped objects into a vector.
   void DumpListOfModules(InternalMmapVector<LoadedModule> *modules);
 
-  // Memory protection masks.
-  static const uptr kProtectionRead = 1;
-  static const uptr kProtectionWrite = 2;
-  static const uptr kProtectionExecute = 4;
-  static const uptr kProtectionShared = 8;
-
  private:
   void LoadFromCache();
 
@@ -67,9 +85,7 @@
   static StaticSpinMutex cache_lock_;  // protects cached_proc_self_maps_.
 # elif SANITIZER_MAC
   template <u32 kLCSegment, typename SegmentCommand>
-  bool NextSegmentLoad(uptr *start, uptr *end, uptr *offset, char filename[],
-                       uptr filename_size, ModuleArch *arch, u8 *uuid,
-                       uptr *protection);
+  bool NextSegmentLoad(MemoryMappedSegment *segment);
   int current_image_;
   u32 current_magic_;
   u32 current_filetype_;
diff --git a/lib/sanitizer_common/sanitizer_procmaps_common.cc b/lib/sanitizer_common/sanitizer_procmaps_common.cc
index fac3fbd..b95f301 100644
--- a/lib/sanitizer_common/sanitizer_procmaps_common.cc
+++ b/lib/sanitizer_common/sanitizer_procmaps_common.cc
@@ -119,12 +119,10 @@
 void MemoryMappingLayout::DumpListOfModules(
     InternalMmapVector<LoadedModule> *modules) {
   Reset();
-  uptr cur_beg, cur_end, cur_offset, prot;
   InternalScopedString module_name(kMaxPathLength);
-  for (uptr i = 0; Next(&cur_beg, &cur_end, &cur_offset, module_name.data(),
-                        module_name.size(), &prot);
-       i++) {
-    const char *cur_name = module_name.data();
+  MemoryMappedSegment segment(module_name.data(), module_name.size());
+  for (uptr i = 0; Next(&segment); i++) {
+    const char *cur_name = segment.filename;
     if (cur_name[0] == '\0')
       continue;
     // Don't subtract 'cur_beg' from the first entry:
@@ -138,10 +136,11 @@
     //   mapped high at address space (in particular, higher than
     //   shadow memory of the tool), so the module can't be the
     //   first entry.
-    uptr base_address = (i ? cur_beg : 0) - cur_offset;
+    uptr base_address = (i ? segment.start : 0) - segment.offset;
     LoadedModule cur_module;
     cur_module.set(cur_name, base_address);
-    cur_module.addAddressRange(cur_beg, cur_end, prot & kProtectionExecute);
+    cur_module.addAddressRange(segment.start, segment.end,
+                               segment.IsExecutable(), segment.IsWritable());
     modules->push_back(cur_module);
   }
 }
diff --git a/lib/sanitizer_common/sanitizer_procmaps_freebsd.cc b/lib/sanitizer_common/sanitizer_procmaps_freebsd.cc
index 3021645..f0cdbeb 100644
--- a/lib/sanitizer_common/sanitizer_procmaps_freebsd.cc
+++ b/lib/sanitizer_common/sanitizer_procmaps_freebsd.cc
@@ -48,36 +48,27 @@
   proc_maps->len = Size;
 }
 
-bool MemoryMappingLayout::Next(uptr *start, uptr *end, uptr *offset,
-                               char filename[], uptr filename_size,
-                               uptr *protection, ModuleArch *arch, u8 *uuid) {
-  CHECK(!arch && "not implemented");
-  CHECK(!uuid && "not implemented");
+bool MemoryMappingLayout::Next(MemoryMappedSegment *segment) {
   char *last = proc_self_maps_.data + proc_self_maps_.len;
   if (current_ >= last) return false;
-  uptr dummy;
-  if (!start) start = &dummy;
-  if (!end) end = &dummy;
-  if (!offset) offset = &dummy;
-  if (!protection) protection = &dummy;
   struct kinfo_vmentry *VmEntry = (struct kinfo_vmentry*)current_;
 
-  *start = (uptr)VmEntry->kve_start;
-  *end = (uptr)VmEntry->kve_end;
-  *offset = (uptr)VmEntry->kve_offset;
+  segment->start = (uptr)VmEntry->kve_start;
+  segment->end = (uptr)VmEntry->kve_end;
+  segment->offset = (uptr)VmEntry->kve_offset;
 
-  *protection = 0;
+  segment->protection = 0;
   if ((VmEntry->kve_protection & KVME_PROT_READ) != 0)
-    *protection |= kProtectionRead;
+    segment->protection |= kProtectionRead;
   if ((VmEntry->kve_protection & KVME_PROT_WRITE) != 0)
-    *protection |= kProtectionWrite;
+    segment->protection |= kProtectionWrite;
   if ((VmEntry->kve_protection & KVME_PROT_EXEC) != 0)
-    *protection |= kProtectionExecute;
+    segment->protection |= kProtectionExecute;
 
-  if (filename != NULL && filename_size > 0) {
-    internal_snprintf(filename,
-                      Min(filename_size, (uptr)PATH_MAX),
-                      "%s", VmEntry->kve_path);
+  if (segment->filename != NULL && segment->filename_size > 0) {
+    internal_snprintf(segment->filename,
+                      Min(segment->filename_size, (uptr)PATH_MAX), "%s",
+                      VmEntry->kve_path);
   }
 
   current_ += VmEntry->kve_structsize;
diff --git a/lib/sanitizer_common/sanitizer_procmaps_linux.cc b/lib/sanitizer_common/sanitizer_procmaps_linux.cc
index fdf85b7..1bcad2b 100644
--- a/lib/sanitizer_common/sanitizer_procmaps_linux.cc
+++ b/lib/sanitizer_common/sanitizer_procmaps_linux.cc
@@ -18,49 +18,36 @@
 namespace __sanitizer {
 
 void ReadProcMaps(ProcSelfMapsBuff *proc_maps) {
-  CHECK(ReadFileToBuffer("/proc/self/maps", &proc_maps->data,
-                         &proc_maps->mmaped_size, &proc_maps->len));
+  ReadFileToBuffer("/proc/self/maps", &proc_maps->data, &proc_maps->mmaped_size,
+                   &proc_maps->len);
 }
 
 static bool IsOneOf(char c, char c1, char c2) {
   return c == c1 || c == c2;
 }
 
-bool MemoryMappingLayout::Next(uptr *start, uptr *end, uptr *offset,
-                               char filename[], uptr filename_size,
-                               uptr *protection, ModuleArch *arch, u8 *uuid) {
-  CHECK(!arch && "not implemented");
-  CHECK(!uuid && "not implemented");
+bool MemoryMappingLayout::Next(MemoryMappedSegment *segment) {
   char *last = proc_self_maps_.data + proc_self_maps_.len;
   if (current_ >= last) return false;
-  uptr dummy;
-  if (!start) start = &dummy;
-  if (!end) end = &dummy;
-  if (!offset) offset = &dummy;
-  if (!protection) protection = &dummy;
   char *next_line = (char*)internal_memchr(current_, '\n', last - current_);
   if (next_line == 0)
     next_line = last;
   // Example: 08048000-08056000 r-xp 00000000 03:0c 64593   /foo/bar
-  *start = ParseHex(&current_);
+  segment->start = ParseHex(&current_);
   CHECK_EQ(*current_++, '-');
-  *end = ParseHex(&current_);
+  segment->end = ParseHex(&current_);
   CHECK_EQ(*current_++, ' ');
   CHECK(IsOneOf(*current_, '-', 'r'));
-  *protection = 0;
-  if (*current_++ == 'r')
-    *protection |= kProtectionRead;
+  segment->protection = 0;
+  if (*current_++ == 'r') segment->protection |= kProtectionRead;
   CHECK(IsOneOf(*current_, '-', 'w'));
-  if (*current_++ == 'w')
-    *protection |= kProtectionWrite;
+  if (*current_++ == 'w') segment->protection |= kProtectionWrite;
   CHECK(IsOneOf(*current_, '-', 'x'));
-  if (*current_++ == 'x')
-    *protection |= kProtectionExecute;
+  if (*current_++ == 'x') segment->protection |= kProtectionExecute;
   CHECK(IsOneOf(*current_, 's', 'p'));
-  if (*current_++ == 's')
-    *protection |= kProtectionShared;
+  if (*current_++ == 's') segment->protection |= kProtectionShared;
   CHECK_EQ(*current_++, ' ');
-  *offset = ParseHex(&current_);
+  segment->offset = ParseHex(&current_);
   CHECK_EQ(*current_++, ' ');
   ParseHex(&current_);
   CHECK_EQ(*current_++, ':');
@@ -75,14 +62,12 @@
   while (current_ < next_line && *current_ == ' ')
     current_++;
   // Fill in the filename.
-  uptr i = 0;
-  while (current_ < next_line) {
-    if (filename && i < filename_size - 1)
-      filename[i++] = *current_;
-    current_++;
+  if (segment->filename) {
+    uptr len = Min((uptr)(next_line - current_), segment->filename_size - 1);
+    internal_strncpy(segment->filename, current_, len);
+    segment->filename[len] = 0;
   }
-  if (filename && i < filename_size)
-    filename[i] = 0;
+
   current_ = next_line + 1;
   return true;
 }
diff --git a/lib/sanitizer_common/sanitizer_procmaps_mac.cc b/lib/sanitizer_common/sanitizer_procmaps_mac.cc
index 2831f28..560451a 100644
--- a/lib/sanitizer_common/sanitizer_procmaps_mac.cc
+++ b/lib/sanitizer_common/sanitizer_procmaps_mac.cc
@@ -18,6 +18,7 @@
 
 #include <mach-o/dyld.h>
 #include <mach-o/loader.h>
+#include <mach/mach.h>
 
 // These are not available in older macOS SDKs.
 #ifndef CPU_SUBTYPE_X86_64_H
@@ -71,6 +72,13 @@
   internal_memset(current_uuid_, 0, kModuleUUIDSize);
 }
 
+// The dyld load address should be unchanged throughout process execution,
+// and it is expensive to compute once many libraries have been loaded,
+// so cache it here and do not reset.
+static mach_header *dyld_hdr = 0;
+static const char kDyldPath[] = "/usr/lib/dyld";
+static const int kDyldImageIdx = -1;
+
 // static
 void MemoryMappingLayout::CacheMemoryMappings() {
   // No-op on Mac for now.
@@ -80,6 +88,48 @@
   // No-op on Mac for now.
 }
 
+// _dyld_get_image_header() and related APIs don't report dyld itself.
+// We work around this by manually recursing through the memory map
+// until we hit a Mach header matching dyld instead. These recurse
+// calls are expensive, but the first memory map generation occurs
+// early in the process, when dyld is one of the only images loaded,
+// so it will be hit after only a few iterations.
+static mach_header *get_dyld_image_header() {
+  mach_port_name_t port;
+  if (task_for_pid(mach_task_self(), internal_getpid(), &port) !=
+      KERN_SUCCESS) {
+    return nullptr;
+  }
+
+  unsigned depth = 1;
+  vm_size_t size = 0;
+  vm_address_t address = 0;
+  kern_return_t err = KERN_SUCCESS;
+  mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64;
+
+  while (true) {
+    struct vm_region_submap_info_64 info;
+    err = vm_region_recurse_64(port, &address, &size, &depth,
+                               (vm_region_info_t)&info, &count);
+    if (err != KERN_SUCCESS) return nullptr;
+
+    if (size >= sizeof(mach_header) && info.protection & kProtectionRead) {
+      mach_header *hdr = (mach_header *)address;
+      if ((hdr->magic == MH_MAGIC || hdr->magic == MH_MAGIC_64) &&
+          hdr->filetype == MH_DYLINKER) {
+        return hdr;
+      }
+    }
+    address += size;
+  }
+}
+
+const mach_header *get_dyld_hdr() {
+  if (!dyld_hdr) dyld_hdr = get_dyld_image_header();
+
+  return dyld_hdr;
+}
+
 // Next and NextSegmentLoad were inspired by base/sysinfo.cc in
 // Google Perftools, https://github.com/gperftools/gperftools.
 
@@ -88,38 +138,39 @@
 // segment.
 // Note that the segment addresses are not necessarily sorted.
 template <u32 kLCSegment, typename SegmentCommand>
-bool MemoryMappingLayout::NextSegmentLoad(uptr *start, uptr *end, uptr *offset,
-                                          char filename[], uptr filename_size,
-                                          ModuleArch *arch, u8 *uuid,
-                                          uptr *protection) {
+bool MemoryMappingLayout::NextSegmentLoad(MemoryMappedSegment *segment) {
   const char *lc = current_load_cmd_addr_;
   current_load_cmd_addr_ += ((const load_command *)lc)->cmdsize;
   if (((const load_command *)lc)->cmd == kLCSegment) {
-    const sptr dlloff = _dyld_get_image_vmaddr_slide(current_image_);
     const SegmentCommand* sc = (const SegmentCommand *)lc;
-    if (start) *start = sc->vmaddr + dlloff;
-    if (protection) {
-      // Return the initial protection.
-      *protection = sc->initprot;
+
+    if (current_image_ == kDyldImageIdx) {
+      // vmaddr is masked with 0xfffff because on macOS versions < 10.12,
+      // it contains an absolute address rather than an offset for dyld.
+      // To make matters even more complicated, this absolute address
+      // isn't actually the absolute segment address, but the offset portion
+      // of the address is accurate when combined with the dyld base address,
+      // and the mask will give just this offset.
+      segment->start = (sc->vmaddr & 0xfffff) + (uptr)get_dyld_hdr();
+      segment->end = (sc->vmaddr & 0xfffff) + sc->vmsize + (uptr)get_dyld_hdr();
+    } else {
+      const sptr dlloff = _dyld_get_image_vmaddr_slide(current_image_);
+      segment->start = sc->vmaddr + dlloff;
+      segment->end = sc->vmaddr + sc->vmsize + dlloff;
     }
-    if (end) *end = sc->vmaddr + sc->vmsize + dlloff;
-    if (offset) {
-      if (current_filetype_ == /*MH_EXECUTE*/ 0x2) {
-        *offset = sc->vmaddr;
-      } else {
-        *offset = sc->fileoff;
-      }
+
+    // Return the initial protection.
+    segment->protection = sc->initprot;
+    segment->offset =
+        (current_filetype_ == /*MH_EXECUTE*/ 0x2) ? sc->vmaddr : sc->fileoff;
+    if (segment->filename) {
+      const char *src = (current_image_ == kDyldImageIdx)
+                            ? kDyldPath
+                            : _dyld_get_image_name(current_image_);
+      internal_strncpy(segment->filename, src, segment->filename_size);
     }
-    if (filename) {
-      internal_strncpy(filename, _dyld_get_image_name(current_image_),
-                       filename_size);
-    }
-    if (arch) {
-      *arch = current_arch_;
-    }
-    if (uuid) {
-      internal_memcpy(uuid, current_uuid_, kModuleUUIDSize);
-    }
+    segment->arch = current_arch_;
+    internal_memcpy(segment->uuid, current_uuid_, kModuleUUIDSize);
     return true;
   }
   return false;
@@ -180,11 +231,11 @@
   return false;
 }
 
-bool MemoryMappingLayout::Next(uptr *start, uptr *end, uptr *offset,
-                               char filename[], uptr filename_size,
-                               uptr *protection, ModuleArch *arch, u8 *uuid) {
-  for (; current_image_ >= 0; current_image_--) {
-    const mach_header* hdr = _dyld_get_image_header(current_image_);
+bool MemoryMappingLayout::Next(MemoryMappedSegment *segment) {
+  for (; current_image_ >= kDyldImageIdx; current_image_--) {
+    const mach_header *hdr = (current_image_ == kDyldImageIdx)
+                                 ? get_dyld_hdr()
+                                 : _dyld_get_image_header(current_image_);
     if (!hdr) continue;
     if (current_load_cmd_count_ < 0) {
       // Set up for this image;
@@ -218,16 +269,13 @@
 #ifdef MH_MAGIC_64
         case MH_MAGIC_64: {
           if (NextSegmentLoad<LC_SEGMENT_64, struct segment_command_64>(
-                  start, end, offset, filename, filename_size, arch, uuid,
-                  protection))
+                  segment))
             return true;
           break;
         }
 #endif
         case MH_MAGIC: {
-          if (NextSegmentLoad<LC_SEGMENT, struct segment_command>(
-                  start, end, offset, filename, filename_size, arch, uuid,
-                  protection))
+          if (NextSegmentLoad<LC_SEGMENT, struct segment_command>(segment))
             return true;
           break;
         }
@@ -242,27 +290,22 @@
 void MemoryMappingLayout::DumpListOfModules(
     InternalMmapVector<LoadedModule> *modules) {
   Reset();
-  uptr cur_beg, cur_end, prot;
-  ModuleArch cur_arch;
-  u8 cur_uuid[kModuleUUIDSize];
   InternalScopedString module_name(kMaxPathLength);
-  for (uptr i = 0; Next(&cur_beg, &cur_end, 0, module_name.data(),
-                        module_name.size(), &prot, &cur_arch, &cur_uuid[0]);
-       i++) {
-    const char *cur_name = module_name.data();
-    if (cur_name[0] == '\0')
-      continue;
+  MemoryMappedSegment segment(module_name.data(), kMaxPathLength);
+  for (uptr i = 0; Next(&segment); i++) {
+    if (segment.filename[0] == '\0') continue;
     LoadedModule *cur_module = nullptr;
     if (!modules->empty() &&
-        0 == internal_strcmp(cur_name, modules->back().full_name())) {
+        0 == internal_strcmp(segment.filename, modules->back().full_name())) {
       cur_module = &modules->back();
     } else {
       modules->push_back(LoadedModule());
       cur_module = &modules->back();
-      cur_module->set(cur_name, cur_beg, cur_arch, cur_uuid,
-                      current_instrumented_);
+      cur_module->set(segment.filename, segment.start, segment.arch,
+                      segment.uuid, current_instrumented_);
     }
-    cur_module->addAddressRange(cur_beg, cur_end, prot & kProtectionExecute);
+    cur_module->addAddressRange(segment.start, segment.end,
+                                segment.IsExecutable(), segment.IsWritable());
   }
 }
 
diff --git a/lib/sanitizer_common/sanitizer_quarantine.h b/lib/sanitizer_common/sanitizer_quarantine.h
index 1a0d954..db38867 100644
--- a/lib/sanitizer_common/sanitizer_quarantine.h
+++ b/lib/sanitizer_common/sanitizer_quarantine.h
@@ -31,6 +31,40 @@
   uptr size;
   uptr count;
   void *batch[kSize];
+
+  void init(void *ptr, uptr size) {
+    count = 1;
+    batch[0] = ptr;
+    this->size = size + sizeof(QuarantineBatch);  // Account for the batch size.
+  }
+
+  // The total size of quarantined nodes recorded in this batch.
+  uptr quarantined_size() const {
+    return size - sizeof(QuarantineBatch);
+  }
+
+  void push_back(void *ptr, uptr size) {
+    CHECK_LT(count, kSize);
+    batch[count++] = ptr;
+    this->size += size;
+  }
+
+  bool can_merge(const QuarantineBatch* const from) const {
+    return count + from->count <= kSize;
+  }
+
+  void merge(QuarantineBatch* const from) {
+    CHECK_LE(count + from->count, kSize);
+    CHECK_GE(size, sizeof(QuarantineBatch));
+
+    for (uptr i = 0; i < from->count; ++i)
+      batch[count + i] = from->batch[i];
+    count += from->count;
+    size += from->quarantined_size();
+
+    from->count = 0;
+    from->size = sizeof(QuarantineBatch);
+  }
 };
 
 COMPILER_CHECK(sizeof(QuarantineBatch) <= (1 << 13));  // 8Kb.
@@ -69,7 +103,7 @@
     if (cache_size) {
       c->Enqueue(cb, ptr, size);
     } else {
-      // cache_size == 0 only when size == 0 (see Init).
+      // GetCacheSize() == 0 only when GetSize() == 0 (see Init).
       cb.Recycle(ptr);
     }
     // Check cache size anyway to accommodate for runtime cache_size change.
@@ -88,6 +122,8 @@
 
   void PrintStats() const {
     // It assumes that the world is stopped, just as the allocator's PrintStats.
+    Printf("Quarantine limits: global: %zdMb; thread local: %zdKb\n",
+           GetSize() >> 20, GetCacheSize() >> 10);
     cache_.PrintStats();
   }
 
@@ -108,9 +144,27 @@
     uptr min_size = atomic_load(&min_size_, memory_order_relaxed);
     {
       SpinMutexLock l(&cache_mutex_);
+      // Go over the batches and merge partially filled ones to
+      // save some memory, otherwise batches themselves (since the memory used
+      // by them is counted against quarantine limit) can overcome the actual
+      // user's quarantined chunks, which diminishes the purpose of the
+      // quarantine.
+      uptr cache_size = cache_.Size();
+      uptr overhead_size = cache_.OverheadSize();
+      CHECK_GE(cache_size, overhead_size);
+      // Do the merge only when overhead exceeds this predefined limit (might
+      // require some tuning). It saves us merge attempt when the batch list
+      // quarantine is unlikely to contain batches suitable for merge.
+      const uptr kOverheadThresholdPercents = 100;
+      if (cache_size > overhead_size &&
+          overhead_size * (100 + kOverheadThresholdPercents) >
+              cache_size * kOverheadThresholdPercents) {
+        cache_.MergeBatches(&tmp);
+      }
+      // Extract enough chunks from the quarantine to get below the max
+      // quarantine size and leave some leeway for the newly quarantined chunks.
       while (cache_.Size() > min_size) {
-        QuarantineBatch *b = cache_.DequeueBatch();
-        tmp.EnqueueBatch(b);
+        tmp.EnqueueBatch(cache_.DequeueBatch());
       }
     }
     recycle_mutex_.Unlock();
@@ -145,26 +199,33 @@
     list_.clear();
   }
 
+  // Total memory used, including internal accounting.
   uptr Size() const {
     return atomic_load(&size_, memory_order_relaxed);
   }
 
-  void Enqueue(Callback cb, void *ptr, uptr size) {
-    if (list_.empty() || list_.back()->count == QuarantineBatch::kSize) {
-      AllocBatch(cb);
-      size += sizeof(QuarantineBatch);  // Count the batch in Quarantine size.
-    }
-    QuarantineBatch *b = list_.back();
-    CHECK(b);
-    b->batch[b->count++] = ptr;
-    b->size += size;
-    SizeAdd(size);
+  // Memory used for internal accounting.
+  uptr OverheadSize() const {
+    return list_.size() * sizeof(QuarantineBatch);
   }
 
-  void Transfer(QuarantineCache *c) {
-    list_.append_back(&c->list_);
-    SizeAdd(c->Size());
-    atomic_store(&c->size_, 0, memory_order_relaxed);
+  void Enqueue(Callback cb, void *ptr, uptr size) {
+    if (list_.empty() || list_.back()->count == QuarantineBatch::kSize) {
+      QuarantineBatch *b = (QuarantineBatch *)cb.Allocate(sizeof(*b));
+      CHECK(b);
+      b->init(ptr, size);
+      EnqueueBatch(b);
+    } else {
+      list_.back()->push_back(ptr, size);
+      SizeAdd(size);
+    }
+  }
+
+  void Transfer(QuarantineCache *from_cache) {
+    list_.append_back(&from_cache->list_);
+    SizeAdd(from_cache->Size());
+
+    atomic_store(&from_cache->size_, 0, memory_order_relaxed);
   }
 
   void EnqueueBatch(QuarantineBatch *b) {
@@ -181,19 +242,51 @@
     return b;
   }
 
+  void MergeBatches(QuarantineCache *to_deallocate) {
+    uptr extracted_size = 0;
+    QuarantineBatch *current = list_.front();
+    while (current && current->next) {
+      if (current->can_merge(current->next)) {
+        QuarantineBatch *extracted = current->next;
+        // Move all the chunks into the current batch.
+        current->merge(extracted);
+        CHECK_EQ(extracted->count, 0);
+        CHECK_EQ(extracted->size, sizeof(QuarantineBatch));
+        // Remove the next batch from the list and account for its size.
+        list_.extract(current, extracted);
+        extracted_size += extracted->size;
+        // Add it to deallocation list.
+        to_deallocate->EnqueueBatch(extracted);
+      } else {
+        current = current->next;
+      }
+    }
+    SizeSub(extracted_size);
+  }
+
   void PrintStats() const {
     uptr batch_count = 0;
-    uptr total_quarantine_bytes = 0;
+    uptr total_overhead_bytes = 0;
+    uptr total_bytes = 0;
     uptr total_quarantine_chunks = 0;
     for (List::ConstIterator it = list_.begin(); it != list_.end(); ++it) {
       batch_count++;
-      total_quarantine_bytes += (*it).size;
+      total_bytes += (*it).size;
+      total_overhead_bytes += (*it).size - (*it).quarantined_size();
       total_quarantine_chunks += (*it).count;
     }
-    Printf("Global quarantine stats: batches: %zd; bytes: %zd; chunks: %zd "
-           "(capacity: %zd chunks)\n",
-           batch_count, total_quarantine_bytes, total_quarantine_chunks,
-           batch_count * QuarantineBatch::kSize);
+    uptr quarantine_chunks_capacity = batch_count * QuarantineBatch::kSize;
+    int chunks_usage_percent = quarantine_chunks_capacity == 0 ?
+        0 : total_quarantine_chunks * 100 / quarantine_chunks_capacity;
+    uptr total_quarantined_bytes = total_bytes - total_overhead_bytes;
+    int memory_overhead_percent = total_quarantined_bytes == 0 ?
+        0 : total_overhead_bytes * 100 / total_quarantined_bytes;
+    Printf("Global quarantine stats: batches: %zd; bytes: %zd (user: %zd); "
+           "chunks: %zd (capacity: %zd); %d%% chunks used; %d%% memory overhead"
+           "\n",
+           batch_count, total_bytes, total_quarantined_bytes,
+           total_quarantine_chunks, quarantine_chunks_capacity,
+           chunks_usage_percent, memory_overhead_percent);
   }
 
  private:
@@ -208,15 +301,6 @@
   void SizeSub(uptr sub) {
     atomic_store(&size_, Size() - sub, memory_order_relaxed);
   }
-
-  NOINLINE QuarantineBatch* AllocBatch(Callback cb) {
-    QuarantineBatch *b = (QuarantineBatch *)cb.Allocate(sizeof(*b));
-    CHECK(b);
-    b->count = 0;
-    b->size = 0;
-    list_.push_back(b);
-    return b;
-  }
 };
 
 } // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc b/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc
index c65f60e..747a4a7 100644
--- a/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cc
@@ -39,11 +39,12 @@
       RenderFrame(&frame_desc, common_flags()->stack_trace_format, frame_num++,
                   cur->info, common_flags()->symbolize_vs_style,
                   common_flags()->strip_path_prefix);
-      Printf("    %s\n", frame_desc.data());
+      Printf("%s\n", frame_desc.data());
       if (dedup_frames-- > 0) {
         if (dedup_token.length())
           dedup_token.append("--");
-        dedup_token.append(cur->info.function);
+        if (cur->info.function != nullptr)
+          dedup_token.append(cur->info.function);
       }
     }
     frames->ClearAll();
diff --git a/lib/sanitizer_common/sanitizer_stacktrace_printer.cc b/lib/sanitizer_common/sanitizer_stacktrace_printer.cc
index 04e7728..377f1ce 100644
--- a/lib/sanitizer_common/sanitizer_stacktrace_printer.cc
+++ b/lib/sanitizer_common/sanitizer_stacktrace_printer.cc
@@ -24,7 +24,7 @@
   return function;
 }
 
-static const char kDefaultFormat[] = "#%n %p %F %L";
+static const char kDefaultFormat[] = "    #%n %p %F %L";
 
 void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no,
                  const AddressInfo &info, bool vs_style,
diff --git a/lib/sanitizer_common/sanitizer_stoptheworld.h b/lib/sanitizer_common/sanitizer_stoptheworld.h
index aa6f5d8..20b49ae 100644
--- a/lib/sanitizer_common/sanitizer_stoptheworld.h
+++ b/lib/sanitizer_common/sanitizer_stoptheworld.h
@@ -18,36 +18,32 @@
 #include "sanitizer_common.h"
 
 namespace __sanitizer {
-typedef int SuspendedThreadID;
+
+enum PtraceRegistersStatus {
+  REGISTERS_UNAVAILABLE_FATAL = -1,
+  REGISTERS_UNAVAILABLE = 0,
+  REGISTERS_AVAILABLE = 1
+};
 
 // Holds the list of suspended threads and provides an interface to dump their
 // register contexts.
 class SuspendedThreadsList {
  public:
-  SuspendedThreadsList()
-    : thread_ids_(1024) {}
-  SuspendedThreadID GetThreadID(uptr index) const {
-    CHECK_LT(index, thread_ids_.size());
-    return thread_ids_[index];
+  SuspendedThreadsList() = default;
+
+  // Can't declare pure virtual functions in sanitizer runtimes:
+  // __cxa_pure_virtual might be unavailable. Use UNIMPLEMENTED() instead.
+  virtual PtraceRegistersStatus GetRegistersAndSP(uptr index, uptr *buffer,
+                                                  uptr *sp) const {
+    UNIMPLEMENTED();
   }
-  int GetRegistersAndSP(uptr index, uptr *buffer, uptr *sp) const;
+
   // The buffer in GetRegistersAndSP should be at least this big.
-  static uptr RegisterCount();
-  uptr thread_count() const { return thread_ids_.size(); }
-  bool Contains(SuspendedThreadID thread_id) const {
-    for (uptr i = 0; i < thread_ids_.size(); i++) {
-      if (thread_ids_[i] == thread_id)
-        return true;
-    }
-    return false;
-  }
-  void Append(SuspendedThreadID thread_id) {
-    thread_ids_.push_back(thread_id);
-  }
+  virtual uptr RegisterCount() const { UNIMPLEMENTED(); }
+  virtual uptr ThreadCount() const { UNIMPLEMENTED(); }
+  virtual tid_t GetThreadID(uptr index) const { UNIMPLEMENTED(); }
 
  private:
-  InternalMmapVector<SuspendedThreadID> thread_ids_;
-
   // Prohibit copy and assign.
   SuspendedThreadsList(const SuspendedThreadsList&);
   void operator=(const SuspendedThreadsList&);
diff --git a/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
index eb4c403..d7fa5f6 100644
--- a/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
@@ -16,7 +16,8 @@
 
 #if SANITIZER_LINUX && (defined(__x86_64__) || defined(__mips__) || \
                         defined(__aarch64__) || defined(__powerpc64__) || \
-                        defined(__s390__))
+                        defined(__s390__) || defined(__i386__) || \
+                        defined(__arm__))
 
 #include "sanitizer_stoptheworld.h"
 
@@ -31,17 +32,13 @@
 #include <sys/types.h> // for pid_t
 #include <sys/uio.h> // for iovec
 #include <elf.h> // for NT_PRSTATUS
-#if SANITIZER_ANDROID && defined(__arm__)
-# include <linux/user.h>  // for pt_regs
-#else
-# ifdef __aarch64__
+#if defined(__aarch64__) && !SANITIZER_ANDROID
 // GLIBC 2.20+ sys/user does not include asm/ptrace.h
-#  include <asm/ptrace.h>
-# endif
-# include <sys/user.h>  // for user_regs_struct
-# if SANITIZER_ANDROID && SANITIZER_MIPS
-#   include <asm/reg.h>  // for mips SP register in sys/user.h
-# endif
+# include <asm/ptrace.h>
+#endif
+#include <sys/user.h>  // for user_regs_struct
+#if SANITIZER_ANDROID && SANITIZER_MIPS
+# include <asm/reg.h>  // for mips SP register in sys/user.h
 #endif
 #include <sys/wait.h> // for signal-related stuff
 
@@ -81,7 +78,22 @@
 
 namespace __sanitizer {
 
-COMPILER_CHECK(sizeof(SuspendedThreadID) == sizeof(pid_t));
+class SuspendedThreadsListLinux : public SuspendedThreadsList {
+ public:
+  SuspendedThreadsListLinux() : thread_ids_(1024) {}
+
+  tid_t GetThreadID(uptr index) const;
+  uptr ThreadCount() const;
+  bool ContainsTid(tid_t thread_id) const;
+  void Append(tid_t tid);
+
+  PtraceRegistersStatus GetRegistersAndSP(uptr index, uptr *buffer,
+                                          uptr *sp) const;
+  uptr RegisterCount() const;
+
+ private:
+  InternalMmapVector<tid_t> thread_ids_;
+};
 
 // Structure for passing arguments into the tracer thread.
 struct TracerThreadArgument {
@@ -106,31 +118,31 @@
   bool SuspendAllThreads();
   void ResumeAllThreads();
   void KillAllThreads();
-  SuspendedThreadsList &suspended_threads_list() {
+  SuspendedThreadsListLinux &suspended_threads_list() {
     return suspended_threads_list_;
   }
   TracerThreadArgument *arg;
  private:
-  SuspendedThreadsList suspended_threads_list_;
+  SuspendedThreadsListLinux suspended_threads_list_;
   pid_t pid_;
-  bool SuspendThread(SuspendedThreadID thread_id);
+  bool SuspendThread(tid_t thread_id);
 };
 
-bool ThreadSuspender::SuspendThread(SuspendedThreadID tid) {
+bool ThreadSuspender::SuspendThread(tid_t tid) {
   // Are we already attached to this thread?
   // Currently this check takes linear time, however the number of threads is
   // usually small.
-  if (suspended_threads_list_.Contains(tid))
-    return false;
+  if (suspended_threads_list_.ContainsTid(tid)) return false;
   int pterrno;
   if (internal_iserror(internal_ptrace(PTRACE_ATTACH, tid, nullptr, nullptr),
                        &pterrno)) {
     // Either the thread is dead, or something prevented us from attaching.
     // Log this event and move on.
-    VReport(1, "Could not attach to thread %d (errno %d).\n", tid, pterrno);
+    VReport(1, "Could not attach to thread %zu (errno %d).\n", (uptr)tid,
+            pterrno);
     return false;
   } else {
-    VReport(2, "Attached to thread %d.\n", tid);
+    VReport(2, "Attached to thread %zu.\n", (uptr)tid);
     // The thread is not guaranteed to stop before ptrace returns, so we must
     // wait on it. Note: if the thread receives a signal concurrently,
     // we can get notification about the signal before notification about stop.
@@ -148,8 +160,8 @@
       if (internal_iserror(waitpid_status, &wperrno)) {
         // Got a ECHILD error. I don't think this situation is possible, but it
         // doesn't hurt to report it.
-        VReport(1, "Waiting on thread %d failed, detaching (errno %d).\n",
-                tid, wperrno);
+        VReport(1, "Waiting on thread %zu failed, detaching (errno %d).\n",
+                (uptr)tid, wperrno);
         internal_ptrace(PTRACE_DETACH, tid, nullptr, nullptr);
         return false;
       }
@@ -166,7 +178,7 @@
 }
 
 void ThreadSuspender::ResumeAllThreads() {
-  for (uptr i = 0; i < suspended_threads_list_.thread_count(); i++) {
+  for (uptr i = 0; i < suspended_threads_list_.ThreadCount(); i++) {
     pid_t tid = suspended_threads_list_.GetThreadID(i);
     int pterrno;
     if (!internal_iserror(internal_ptrace(PTRACE_DETACH, tid, nullptr, nullptr),
@@ -182,7 +194,7 @@
 }
 
 void ThreadSuspender::KillAllThreads() {
-  for (uptr i = 0; i < suspended_threads_list_.thread_count(); i++)
+  for (uptr i = 0; i < suspended_threads_list_.ThreadCount(); i++)
     internal_ptrace(PTRACE_KILL, suspended_threads_list_.GetThreadID(i),
                     nullptr, nullptr);
 }
@@ -275,7 +287,7 @@
 
   // Alternate stack for signal handling.
   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
-  struct sigaltstack handler_stack;
+  stack_t handler_stack;
   internal_memset(&handler_stack, 0, sizeof(handler_stack));
   handler_stack.ss_sp = handler_stack_memory.data();
   handler_stack.ss_size = kHandlerStackSize;
@@ -493,9 +505,28 @@
 #error "Unsupported architecture"
 #endif // SANITIZER_ANDROID && defined(__arm__)
 
-int SuspendedThreadsList::GetRegistersAndSP(uptr index,
-                                            uptr *buffer,
-                                            uptr *sp) const {
+tid_t SuspendedThreadsListLinux::GetThreadID(uptr index) const {
+  CHECK_LT(index, thread_ids_.size());
+  return thread_ids_[index];
+}
+
+uptr SuspendedThreadsListLinux::ThreadCount() const {
+  return thread_ids_.size();
+}
+
+bool SuspendedThreadsListLinux::ContainsTid(tid_t thread_id) const {
+  for (uptr i = 0; i < thread_ids_.size(); i++) {
+    if (thread_ids_[i] == thread_id) return true;
+  }
+  return false;
+}
+
+void SuspendedThreadsListLinux::Append(tid_t tid) {
+  thread_ids_.push_back(tid);
+}
+
+PtraceRegistersStatus SuspendedThreadsListLinux::GetRegistersAndSP(
+    uptr index, uptr *buffer, uptr *sp) const {
   pid_t tid = GetThreadID(index);
   regs_struct regs;
   int pterrno;
@@ -513,19 +544,23 @@
   if (isErr) {
     VReport(1, "Could not get registers from thread %d (errno %d).\n", tid,
             pterrno);
-    return -1;
+    // ESRCH means that the given thread is not suspended or already dead.
+    // Therefore it's unsafe to inspect its data (e.g. walk through stack) and
+    // we should notify caller about this.
+    return pterrno == ESRCH ? REGISTERS_UNAVAILABLE_FATAL
+                            : REGISTERS_UNAVAILABLE;
   }
 
   *sp = regs.REG_SP;
   internal_memcpy(buffer, &regs, sizeof(regs));
-  return 0;
+  return REGISTERS_AVAILABLE;
 }
 
-uptr SuspendedThreadsList::RegisterCount() {
+uptr SuspendedThreadsListLinux::RegisterCount() const {
   return sizeof(regs_struct) / sizeof(uptr);
 }
 } // namespace __sanitizer
 
 #endif  // SANITIZER_LINUX && (defined(__x86_64__) || defined(__mips__)
         // || defined(__aarch64__) || defined(__powerpc64__)
-        // || defined(__s390__)
+        // || defined(__s390__) || defined(__i386__) || defined(__arm__)
diff --git a/lib/sanitizer_common/sanitizer_stoptheworld_mac.cc b/lib/sanitizer_common/sanitizer_stoptheworld_mac.cc
new file mode 100644
index 0000000..0c27c47
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_stoptheworld_mac.cc
@@ -0,0 +1,186 @@
+//===-- sanitizer_stoptheworld_mac.cc -------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// See sanitizer_stoptheworld.h for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_platform.h"
+
+#if SANITIZER_MAC && (defined(__x86_64__) || defined(__aarch64__) || \
+                      defined(__i386))
+
+#include <mach/mach.h>
+#include <mach/thread_info.h>
+#include <pthread.h>
+
+#include "sanitizer_stoptheworld.h"
+
+namespace __sanitizer {
+typedef struct {
+  tid_t tid;
+  thread_t thread;
+} SuspendedThreadInfo;
+
+class SuspendedThreadsListMac : public SuspendedThreadsList {
+ public:
+  SuspendedThreadsListMac() : threads_(1024) {}
+
+  tid_t GetThreadID(uptr index) const;
+  thread_t GetThread(uptr index) const;
+  uptr ThreadCount() const;
+  bool ContainsThread(thread_t thread) const;
+  void Append(thread_t thread);
+
+  PtraceRegistersStatus GetRegistersAndSP(uptr index, uptr *buffer,
+                                          uptr *sp) const;
+  uptr RegisterCount() const;
+
+ private:
+  InternalMmapVector<SuspendedThreadInfo> threads_;
+};
+
+struct RunThreadArgs {
+  StopTheWorldCallback callback;
+  void *argument;
+};
+
+void RunThread(void *arg) {
+  struct RunThreadArgs *run_args = (struct RunThreadArgs *)arg;
+  SuspendedThreadsListMac suspended_threads_list;
+
+  mach_port_t task;
+  kern_return_t err = task_for_pid(mach_task_self(), internal_getpid(), &task);
+  if (err != KERN_SUCCESS) {
+    VReport(1, "Getting task from pid failed (errno %d).\n", err);
+    return;
+  }
+
+  thread_array_t threads;
+  mach_msg_type_number_t num_threads;
+
+  err = task_threads(task, &threads, &num_threads);
+  if (err != KERN_SUCCESS) {
+    VReport(1, "Failed to get threads for task (errno %d).\n", err);
+    return;
+  }
+
+  thread_t thread_self = mach_thread_self();
+  for (unsigned int i = 0; i < num_threads; ++i) {
+    if (threads[i] == thread_self) continue;
+
+    thread_suspend(threads[i]);
+    suspended_threads_list.Append(threads[i]);
+  }
+
+  run_args->callback(suspended_threads_list, run_args->argument);
+
+  uptr num_suspended = suspended_threads_list.ThreadCount();
+  for (unsigned int i = 0; i < num_suspended; ++i) {
+    thread_resume(suspended_threads_list.GetThread(i));
+  }
+}
+
+void StopTheWorld(StopTheWorldCallback callback, void *argument) {
+  struct RunThreadArgs arg = {callback, argument};
+  pthread_t run_thread = (pthread_t)internal_start_thread(RunThread, &arg);
+  internal_join_thread(run_thread);
+}
+
+#if defined(__x86_64__)
+typedef x86_thread_state64_t regs_struct;
+
+#define SP_REG __rsp
+
+#elif defined(__aarch64__)
+typedef arm_thread_state64_t regs_struct;
+
+# if __DARWIN_UNIX03
+#  define SP_REG __sp
+# else
+#  define SP_REG sp
+# endif
+
+#elif defined(__i386)
+typedef x86_thread_state32_t regs_struct;
+
+#define SP_REG __esp
+
+#else
+#error "Unsupported architecture"
+#endif
+
+tid_t SuspendedThreadsListMac::GetThreadID(uptr index) const {
+  CHECK_LT(index, threads_.size());
+  return threads_[index].tid;
+}
+
+thread_t SuspendedThreadsListMac::GetThread(uptr index) const {
+  CHECK_LT(index, threads_.size());
+  return threads_[index].thread;
+}
+
+uptr SuspendedThreadsListMac::ThreadCount() const {
+  return threads_.size();
+}
+
+bool SuspendedThreadsListMac::ContainsThread(thread_t thread) const {
+  for (uptr i = 0; i < threads_.size(); i++) {
+    if (threads_[i].thread == thread) return true;
+  }
+  return false;
+}
+
+void SuspendedThreadsListMac::Append(thread_t thread) {
+  thread_identifier_info_data_t info;
+  mach_msg_type_number_t info_count = THREAD_IDENTIFIER_INFO_COUNT;
+  kern_return_t err = thread_info(thread, THREAD_IDENTIFIER_INFO,
+                                  (thread_info_t)&info, &info_count);
+  if (err != KERN_SUCCESS) {
+    VReport(1, "Error - unable to get thread ident for a thread\n");
+    return;
+  }
+  threads_.push_back({info.thread_id, thread});
+}
+
+PtraceRegistersStatus SuspendedThreadsListMac::GetRegistersAndSP(
+    uptr index, uptr *buffer, uptr *sp) const {
+  thread_t thread = GetThread(index);
+  regs_struct regs;
+  int err;
+  mach_msg_type_number_t reg_count = MACHINE_THREAD_STATE_COUNT;
+  err = thread_get_state(thread, MACHINE_THREAD_STATE, (thread_state_t)&regs,
+                         &reg_count);
+  if (err != KERN_SUCCESS) {
+    VReport(1, "Error - unable to get registers for a thread\n");
+    // KERN_INVALID_ARGUMENT indicates that either the flavor is invalid,
+    // or the thread does not exist. The other possible error case,
+    // MIG_ARRAY_TOO_LARGE, means that the state is too large, but it's
+    // still safe to proceed.
+    return err == KERN_INVALID_ARGUMENT ? REGISTERS_UNAVAILABLE_FATAL
+                                        : REGISTERS_UNAVAILABLE;
+  }
+
+  internal_memcpy(buffer, &regs, sizeof(regs));
+  *sp = regs.SP_REG;
+
+  // On x86_64 and aarch64, we must account for the stack redzone, which is 128
+  // bytes.
+  if (SANITIZER_WORDSIZE == 64) *sp -= 128;
+
+  return REGISTERS_AVAILABLE;
+}
+
+uptr SuspendedThreadsListMac::RegisterCount() const {
+  return MACHINE_THREAD_STATE_COUNT;
+}
+} // namespace __sanitizer
+
+#endif  // SANITIZER_MAC && (defined(__x86_64__) || defined(__aarch64__)) ||
+        //                   defined(__i386))
diff --git a/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc b/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
index 7c377a7..614470a 100644
--- a/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
@@ -356,11 +356,19 @@
   CHECK(module_name);
   const char *is_data_str = is_data ? "DATA " : "";
   if (arch == kModuleArchUnknown) {
-    internal_snprintf(buffer_, kBufferSize, "%s\"%s\" 0x%zx\n", is_data_str,
-                      module_name, module_offset);
+    if (internal_snprintf(buffer_, kBufferSize, "%s\"%s\" 0x%zx\n", is_data_str,
+                          module_name,
+                          module_offset) >= static_cast<int>(kBufferSize)) {
+      Report("WARNING: Command buffer too small");
+      return nullptr;
+    }
   } else {
-    internal_snprintf(buffer_, kBufferSize, "%s\"%s:%s\" 0x%zx\n", is_data_str,
-                      module_name, ModuleArchToString(arch), module_offset);
+    if (internal_snprintf(buffer_, kBufferSize, "%s\"%s:%s\" 0x%zx\n",
+                          is_data_str, module_name, ModuleArchToString(arch),
+                          module_offset) >= static_cast<int>(kBufferSize)) {
+      Report("WARNING: Command buffer too small");
+      return nullptr;
+    }
   }
   return symbolizer_process_->SendCommand(buffer_);
 }
@@ -377,7 +385,23 @@
   CHECK_NE(path_[0], '\0');
 }
 
+static bool IsSameModule(const char* path) {
+  if (const char* ProcessName = GetProcessName()) {
+    if (const char* SymbolizerName = StripModuleName(path)) {
+      return !internal_strcmp(ProcessName, SymbolizerName);
+    }
+  }
+  return false;
+}
+
 const char *SymbolizerProcess::SendCommand(const char *command) {
+  if (failed_to_start_)
+    return nullptr;
+  if (IsSameModule(path_)) {
+    Report("WARNING: Symbolizer was blocked from starting itself!\n");
+    failed_to_start_ = true;
+    return nullptr;
+  }
   for (; times_restarted_ < kMaxTimesRestarted; times_restarted_++) {
     // Start or restart symbolizer if we failed to send command to it.
     if (const char *res = SendCommandImpl(command))
@@ -426,6 +450,11 @@
     read_len += just_read;
     if (ReachedEndOfOutput(buffer, read_len))
       break;
+    if (read_len + 1 == max_length) {
+      Report("WARNING: Symbolizer buffer too small");
+      read_len = 0;
+      break;
+    }
   }
   buffer[read_len] = '\0';
   return true;
diff --git a/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
index f50d8b1..60ec750 100644
--- a/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
@@ -424,7 +424,6 @@
   InternalSymbolizer() { }
 
   static const int kBufferSize = 16 * 1024;
-  static const int kMaxDemangledNameSize = 1024;
   char buffer_[kBufferSize];
 };
 #else  // SANITIZER_SUPPORTS_WEAK_HOOKS
@@ -496,7 +495,7 @@
     VReport(2, "Symbolizer is disabled.\n");
     return;
   }
-  if (IsReportingOOM()) {
+  if (IsAllocatorOutOfMemory()) {
     VReport(2, "Cannot use internal symbolizer: out of memory\n");
   } else if (SymbolizerTool *tool = InternalSymbolizer::get(allocator)) {
     VReport(2, "Using internal symbolizer.\n");
diff --git a/lib/sanitizer_common/sanitizer_thread_registry.cc b/lib/sanitizer_common/sanitizer_thread_registry.cc
index c5b2e09..439e33a 100644
--- a/lib/sanitizer_common/sanitizer_thread_registry.cc
+++ b/lib/sanitizer_common/sanitizer_thread_registry.cc
@@ -59,7 +59,8 @@
   OnFinished();
 }
 
-void ThreadContextBase::SetStarted(uptr _os_id, bool _workerthread, void *arg) {
+void ThreadContextBase::SetStarted(tid_t _os_id, bool _workerthread,
+                                   void *arg) {
   status = ThreadStatusRunning;
   os_id = _os_id;
   workerthread = _workerthread;
@@ -193,7 +194,7 @@
       tctx->status != ThreadStatusDead);
 }
 
-ThreadContextBase *ThreadRegistry::FindThreadContextByOsIDLocked(uptr os_id) {
+ThreadContextBase *ThreadRegistry::FindThreadContextByOsIDLocked(tid_t os_id) {
   return FindThreadContextLocked(FindThreadContextByOsIdCallback,
                                  (void *)os_id);
 }
@@ -267,7 +268,7 @@
   }
 }
 
-void ThreadRegistry::StartThread(u32 tid, uptr os_id, bool workerthread,
+void ThreadRegistry::StartThread(u32 tid, tid_t os_id, bool workerthread,
                                  void *arg) {
   BlockingMutexLock l(&mtx_);
   running_threads_++;
diff --git a/lib/sanitizer_common/sanitizer_thread_registry.h b/lib/sanitizer_common/sanitizer_thread_registry.h
index 17b1d5d..9aae875 100644
--- a/lib/sanitizer_common/sanitizer_thread_registry.h
+++ b/lib/sanitizer_common/sanitizer_thread_registry.h
@@ -39,7 +39,7 @@
   const u32 tid;  // Thread ID. Main thread should have tid = 0.
   u64 unique_id;  // Unique thread ID.
   u32 reuse_count;  // Number of times this tid was reused.
-  uptr os_id;     // PID (used for reporting).
+  tid_t os_id;     // PID (used for reporting).
   uptr user_id;   // Some opaque user thread id (e.g. pthread_t).
   char name[64];  // As annotated by user.
 
@@ -55,7 +55,7 @@
   void SetDead();
   void SetJoined(void *arg);
   void SetFinished();
-  void SetStarted(uptr _os_id, bool _workerthread, void *arg);
+  void SetStarted(tid_t _os_id, bool _workerthread, void *arg);
   void SetCreated(uptr _user_id, u64 _unique_id, bool _detached,
                   u32 _parent_tid, void *arg);
   void Reset();
@@ -109,14 +109,14 @@
   // is found.
   ThreadContextBase *FindThreadContextLocked(FindThreadCallback cb,
                                              void *arg);
-  ThreadContextBase *FindThreadContextByOsIDLocked(uptr os_id);
+  ThreadContextBase *FindThreadContextByOsIDLocked(tid_t os_id);
 
   void SetThreadName(u32 tid, const char *name);
   void SetThreadNameByUserId(uptr user_id, const char *name);
   void DetachThread(u32 tid, void *arg);
   void JoinThread(u32 tid, void *arg);
   void FinishThread(u32 tid);
-  void StartThread(u32 tid, uptr os_id, bool workerthread, void *arg);
+  void StartThread(u32 tid, tid_t os_id, bool workerthread, void *arg);
 
  private:
   const ThreadContextFactory context_factory_;
diff --git a/lib/sanitizer_common/sanitizer_tls_get_addr.cc b/lib/sanitizer_common/sanitizer_tls_get_addr.cc
index 77c1947..29db37b 100644
--- a/lib/sanitizer_common/sanitizer_tls_get_addr.cc
+++ b/lib/sanitizer_common/sanitizer_tls_get_addr.cc
@@ -136,11 +136,19 @@
 
 DTLS *DTLS_Get() { return &dtls; }
 
+bool DTLSInDestruction(DTLS *dtls) {
+  return dtls->dtv_size == kDestroyedThread;
+}
+
 #else
 void DTLS_on_libc_memalign(void *ptr, uptr size) {}
 DTLS::DTV *DTLS_on_tls_get_addr(void *arg, void *res) { return 0; }
 DTLS *DTLS_Get() { return 0; }
 void DTLS_Destroy() {}
+bool DTLSInDestruction(DTLS *dtls) {
+  UNREACHABLE("dtls is unsupported on this platform!");
+}
+
 #endif  // SANITIZER_INTERCEPT_TLS_GET_ADDR
 
 }  // namespace __sanitizer
diff --git a/lib/sanitizer_common/sanitizer_tls_get_addr.h b/lib/sanitizer_common/sanitizer_tls_get_addr.h
index 58d4763..199a3b2 100644
--- a/lib/sanitizer_common/sanitizer_tls_get_addr.h
+++ b/lib/sanitizer_common/sanitizer_tls_get_addr.h
@@ -55,6 +55,8 @@
 void DTLS_on_libc_memalign(void *ptr, uptr size);
 DTLS *DTLS_Get();
 void DTLS_Destroy();  // Make sure to call this before the thread is destroyed.
+// Returns true if DTLS of suspended thread is in destruction process.
+bool DTLSInDestruction(DTLS *dtls);
 
 }  // namespace __sanitizer
 
diff --git a/lib/sanitizer_common/sanitizer_win.cc b/lib/sanitizer_common/sanitizer_win.cc
index 9682d29..de01e8d 100644
--- a/lib/sanitizer_common/sanitizer_win.cc
+++ b/lib/sanitizer_common/sanitizer_win.cc
@@ -30,6 +30,7 @@
 #include "sanitizer_procmaps.h"
 #include "sanitizer_stacktrace.h"
 #include "sanitizer_symbolizer.h"
+#include "sanitizer_win_defs.h"
 
 // A macro to tell the compiler that this part of the code cannot be reached,
 // if the compiler supports this feature. Since we're using this in
@@ -79,7 +80,7 @@
 
 // In contrast to POSIX, on Windows GetCurrentThreadId()
 // returns a system-unique identifier.
-uptr GetTid() {
+tid_t GetTid() {
   return GetCurrentThreadId();
 }
 
@@ -130,8 +131,24 @@
   }
 }
 
+static void *ReturnNullptrOnOOMOrDie(uptr size, const char *mem_type,
+                                     const char *mmap_type) {
+  error_t last_error = GetLastError();
+  if (last_error == ERROR_NOT_ENOUGH_MEMORY)
+    return nullptr;
+  ReportMmapFailureAndDie(size, mem_type, mmap_type, last_error);
+}
+
+void *MmapOrDieOnFatalError(uptr size, const char *mem_type) {
+  void *rv = VirtualAlloc(0, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
+  if (rv == 0)
+    return ReturnNullptrOnOOMOrDie(size, mem_type, "allocate");
+  return rv;
+}
+
 // We want to map a chunk of address space aligned to 'alignment'.
-void *MmapAlignedOrDie(uptr size, uptr alignment, const char *mem_type) {
+void *MmapAlignedOrDieOnFatalError(uptr size, uptr alignment,
+                                   const char *mem_type) {
   CHECK(IsPowerOfTwo(size));
   CHECK(IsPowerOfTwo(alignment));
 
@@ -141,7 +158,7 @@
   uptr mapped_addr =
       (uptr)VirtualAlloc(0, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
   if (!mapped_addr)
-    ReportMmapFailureAndDie(size, mem_type, "allocate aligned", GetLastError());
+    return ReturnNullptrOnOOMOrDie(size, mem_type, "allocate aligned");
 
   // If we got it right on the first try, return. Otherwise, unmap it and go to
   // the slow path.
@@ -161,8 +178,7 @@
     mapped_addr =
         (uptr)VirtualAlloc(0, size + alignment, MEM_RESERVE, PAGE_NOACCESS);
     if (!mapped_addr)
-      ReportMmapFailureAndDie(size, mem_type, "allocate aligned",
-                              GetLastError());
+      return ReturnNullptrOnOOMOrDie(size, mem_type, "allocate aligned");
 
     // Find the aligned address.
     uptr aligned_addr = RoundUpTo(mapped_addr, alignment);
@@ -180,7 +196,7 @@
 
   // Fail if we can't make this work quickly.
   if (retries == kMaxRetries && mapped_addr == 0)
-    ReportMmapFailureAndDie(size, mem_type, "allocate aligned", GetLastError());
+    return ReturnNullptrOnOOMOrDie(size, mem_type, "allocate aligned");
 
   return (void *)mapped_addr;
 }
@@ -219,6 +235,18 @@
   return p;
 }
 
+void *MmapFixedOrDieOnFatalError(uptr fixed_addr, uptr size) {
+  void *p = VirtualAlloc((LPVOID)fixed_addr, size,
+      MEM_COMMIT, PAGE_READWRITE);
+  if (p == 0) {
+    char mem_type[30];
+    internal_snprintf(mem_type, sizeof(mem_type), "memory at address 0x%zx",
+                      fixed_addr);
+    return ReturnNullptrOnOOMOrDie(size, mem_type, "allocate");
+  }
+  return p;
+}
+
 void *MmapNoReserveOrDie(uptr size, const char *mem_type) {
   // FIXME: make this really NoReserve?
   return MmapOrDie(size, mem_type);
@@ -263,7 +291,8 @@
   // FIXME: add madvise-analog when we move to 64-bits.
 }
 
-uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding) {
+uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,
+                              uptr *largest_gap_found) {
   uptr address = 0;
   while (true) {
     MEMORY_BASIC_INFORMATION info;
@@ -399,9 +428,6 @@
 }
 
 void PrepareForSandboxing(__sanitizer_sandbox_arguments *args) {
-#if !SANITIZER_GO
-  CovPrepareForSandboxing(args);
-#endif
 }
 
 bool StackSizeIsUnlimited() {
@@ -552,7 +578,8 @@
     LoadedModule cur_module;
     cur_module.set(module_name, adjusted_base);
     // We add the whole module as one single address range.
-    cur_module.addAddressRange(base_address, end_address, /*executable*/ true);
+    cur_module.addAddressRange(base_address, end_address, /*executable*/ true,
+                               /*writable*/ true);
     modules_.push_back(cur_module);
   }
   UnmapOrDie(hmodules, modules_buffer_size);
@@ -830,11 +857,64 @@
   // FIXME: Decide what to do on Windows.
 }
 
-bool IsHandledDeadlySignal(int signum) {
+HandleSignalMode GetHandleSignalMode(int signum) {
   // FIXME: Decide what to do on Windows.
+  return kHandleSignalNo;
+}
+
+// Check based on flags if we should handle this exception.
+bool IsHandledDeadlyException(DWORD exceptionCode) {
+  switch (exceptionCode) {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_IN_PAGE_ERROR:
+      return common_flags()->handle_segv;
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_BREAKPOINT:
+      return common_flags()->handle_sigill;
+    case EXCEPTION_FLT_DENORMAL_OPERAND:
+    case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+    case EXCEPTION_FLT_INEXACT_RESULT:
+    case EXCEPTION_FLT_INVALID_OPERATION:
+    case EXCEPTION_FLT_OVERFLOW:
+    case EXCEPTION_FLT_STACK_CHECK:
+    case EXCEPTION_FLT_UNDERFLOW:
+    case EXCEPTION_INT_DIVIDE_BY_ZERO:
+    case EXCEPTION_INT_OVERFLOW:
+      return common_flags()->handle_sigfpe;
+  }
   return false;
 }
 
+const char *DescribeSignalOrException(int signo) {
+  unsigned code = signo;
+  // Get the string description of the exception if this is a known deadly
+  // exception.
+  switch (code) {
+    case EXCEPTION_ACCESS_VIOLATION: return "access-violation";
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: return "array-bounds-exceeded";
+    case EXCEPTION_STACK_OVERFLOW: return "stack-overflow";
+    case EXCEPTION_DATATYPE_MISALIGNMENT: return "datatype-misalignment";
+    case EXCEPTION_IN_PAGE_ERROR: return "in-page-error";
+    case EXCEPTION_ILLEGAL_INSTRUCTION: return "illegal-instruction";
+    case EXCEPTION_PRIV_INSTRUCTION: return "priv-instruction";
+    case EXCEPTION_BREAKPOINT: return "breakpoint";
+    case EXCEPTION_FLT_DENORMAL_OPERAND: return "flt-denormal-operand";
+    case EXCEPTION_FLT_DIVIDE_BY_ZERO: return "flt-divide-by-zero";
+    case EXCEPTION_FLT_INEXACT_RESULT: return "flt-inexact-result";
+    case EXCEPTION_FLT_INVALID_OPERATION: return "flt-invalid-operation";
+    case EXCEPTION_FLT_OVERFLOW: return "flt-overflow";
+    case EXCEPTION_FLT_STACK_CHECK: return "flt-stack-check";
+    case EXCEPTION_FLT_UNDERFLOW: return "flt-underflow";
+    case EXCEPTION_INT_DIVIDE_BY_ZERO: return "int-divide-by-zero";
+    case EXCEPTION_INT_OVERFLOW: return "int-overflow";
+  }
+  return "unknown exception";
+}
+
 bool IsAccessibleMemoryRange(uptr beg, uptr size) {
   SYSTEM_INFO si;
   GetNativeSystemInfo(&si);
@@ -936,21 +1016,15 @@
 // FIXME implement on this platform.
 void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size) { }
 
+void CheckNoDeepBind(const char *filename, int flag) {
+  // Do nothing.
+}
+
+// FIXME: implement on this platform.
+bool GetRandom(void *buffer, uptr length) {
+  UNIMPLEMENTED();
+}
 
 }  // namespace __sanitizer
 
-#if !SANITIZER_GO
-// Workaround to implement weak hooks on Windows. COFF doesn't directly support
-// weak symbols, but it does support /alternatename, which is similar. If the
-// user does not override the hook, we will use this default definition instead
-// of null.
-extern "C" void __sanitizer_print_memory_profile(int top_percent) {}
-
-#ifdef _WIN64
-#pragma comment(linker, "/alternatename:__sanitizer_print_memory_profile=__sanitizer_default_print_memory_profile") // NOLINT
-#else
-#pragma comment(linker, "/alternatename:___sanitizer_print_memory_profile=___sanitizer_default_print_memory_profile") // NOLINT
-#endif
-#endif
-
 #endif  // _WIN32
diff --git a/lib/sanitizer_common/sanitizer_win.h b/lib/sanitizer_common/sanitizer_win.h
new file mode 100644
index 0000000..23e01ab
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win.h
@@ -0,0 +1,26 @@
+//===-- sanitizer_win.h -----------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Windows-specific declarations.
+//
+//===----------------------------------------------------------------------===//
+#ifndef SANITIZER_WIN_H
+#define SANITIZER_WIN_H
+
+#include "sanitizer_platform.h"
+#if SANITIZER_WINDOWS
+#include "sanitizer_internal_defs.h"
+
+namespace __sanitizer {
+// Check based on flags if we should handle the exception.
+bool IsHandledDeadlyException(DWORD exceptionCode);
+}  // namespace __sanitizer
+
+#endif  // SANITIZER_WINDOWS
+#endif  // SANITIZER_WIN_H
diff --git a/lib/sanitizer_common/sanitizer_win_defs.h b/lib/sanitizer_common/sanitizer_win_defs.h
new file mode 100644
index 0000000..077ff9c
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win_defs.h
@@ -0,0 +1,153 @@
+//===-- sanitizer_win_defs.h ------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Common definitions for Windows-specific code.
+//
+//===----------------------------------------------------------------------===//
+#ifndef SANITIZER_WIN_DEFS_H
+#define SANITIZER_WIN_DEFS_H
+
+#include "sanitizer_platform.h"
+#if SANITIZER_WINDOWS
+
+#ifndef WINAPI
+#ifdef _M_IX86
+#define WINAPI __stdcall
+#else
+#define WINAPI
+#endif
+#endif
+
+#if defined(_WIN64)
+#define WIN_SYM_PREFIX
+#else
+#define WIN_SYM_PREFIX "_"
+#endif
+
+// Intermediate macro to ensure the parameter is expanded before stringified.
+#define STRINGIFY_(A) #A
+#define STRINGIFY(A) STRINGIFY_(A)
+
+// ----------------- A workaround for the absence of weak symbols --------------
+// We don't have a direct equivalent of weak symbols when using MSVC, but we can
+// use the /alternatename directive to tell the linker to default a specific
+// symbol to a specific value.
+// Take into account that this is a pragma directive for the linker, so it will
+// be ignored by the compiler and the function will be marked as UNDEF in the
+// symbol table of the resulting object file. The linker won't find the default
+// implementation until it links with that object file.
+// So, suppose we provide a default implementation "fundef" for "fun", and this
+// is compiled into the object file "test.obj" including the pragma directive.
+// If we have some code with references to "fun" and we link that code with
+// "test.obj", it will work because the linker always link object files.
+// But, if "test.obj" is included in a static library, like "test.lib", then the
+// liker will only link to "test.obj" if necessary. If we only included the
+// definition of "fun", it won't link to "test.obj" (from test.lib) because
+// "fun" appears as UNDEF, so it doesn't resolve the symbol "fun", and will
+// result in a link error (the linker doesn't find the pragma directive).
+// So, a workaround is to force linkage with the modules that include weak
+// definitions, with the following macro: WIN_FORCE_LINK()
+
+#define WIN_WEAK_ALIAS(Name, Default)                                          \
+  __pragma(comment(linker, "/alternatename:" WIN_SYM_PREFIX STRINGIFY(Name) "="\
+                                             WIN_SYM_PREFIX STRINGIFY(Default)))
+
+#define WIN_FORCE_LINK(Name)                                                   \
+  __pragma(comment(linker, "/include:" WIN_SYM_PREFIX STRINGIFY(Name)))
+
+#define WIN_EXPORT(ExportedName, Name)                                         \
+  __pragma(comment(linker, "/export:" WIN_SYM_PREFIX STRINGIFY(ExportedName)   \
+                                  "=" WIN_SYM_PREFIX STRINGIFY(Name)))
+
+// We cannot define weak functions on Windows, but we can use WIN_WEAK_ALIAS()
+// which defines an alias to a default implementation, and only works when
+// linking statically.
+// So, to define a weak function "fun", we define a default implementation with
+// a different name "fun__def" and we create a "weak alias" fun = fun__def.
+// Then, users can override it just defining "fun".
+// We impose "extern "C"" because otherwise WIN_WEAK_ALIAS() will fail because
+// of name mangling.
+
+// Dummy name for default implementation of weak function.
+# define WEAK_DEFAULT_NAME(Name) Name##__def
+// Name for exported implementation of weak function.
+# define WEAK_EXPORT_NAME(Name) Name##__dll
+
+// Use this macro when you need to define and export a weak function from a
+// library. For example:
+//   WIN_WEAK_EXPORT_DEF(bool, compare, int a, int b) { return a > b; }
+# define WIN_WEAK_EXPORT_DEF(ReturnType, Name, ...)                            \
+  WIN_WEAK_ALIAS(Name, WEAK_DEFAULT_NAME(Name))                                \
+  WIN_EXPORT(WEAK_EXPORT_NAME(Name), Name)                                     \
+  extern "C" ReturnType Name(__VA_ARGS__);                                     \
+  extern "C" ReturnType WEAK_DEFAULT_NAME(Name)(__VA_ARGS__)
+
+// Use this macro when you need to import a weak function from a library. It
+// defines a weak alias to the imported function from the dll. For example:
+//   WIN_WEAK_IMPORT_DEF(compare)
+# define WIN_WEAK_IMPORT_DEF(Name)                                             \
+  WIN_WEAK_ALIAS(Name, WEAK_EXPORT_NAME(Name))
+
+// So, for Windows we provide something similar to weak symbols in Linux, with
+// some differences:
+// + A default implementation must always be provided.
+//
+// + When linking statically it works quite similarly. For example:
+//
+//   // libExample.cc
+//   WIN_WEAK_EXPORT_DEF(bool, compare, int a, int b) { return a > b; }
+//
+//   // client.cc
+//   // We can use the default implementation from the library:
+//   compare(1, 2);
+//   // Or we can override it:
+//   extern "C" bool compare (int a, int b) { return a >= b; }
+//
+//  And it will work fine. If we don't override the function, we need to ensure
+//  that the linker includes the object file with the default implementation.
+//  We can do so with the linker option "-wholearchive:".
+//
+// + When linking dynamically with a library (dll), weak functions are exported
+//  with "__dll" suffix. Clients can use the macro WIN_WEAK_IMPORT_DEF(fun)
+//  which defines a "weak alias" fun = fun__dll.
+//
+//   // libExample.cc
+//   WIN_WEAK_EXPORT_DEF(bool, compare, int a, int b) { return a > b; }
+//
+//   // client.cc
+//   WIN_WEAK_IMPORT_DEF(compare)
+//   // We can use the default implementation from the library:
+//   compare(1, 2);
+//   // Or we can override it:
+//   extern "C" bool compare (int a, int b) { return a >= b; }
+//
+//  But if we override the function, the dlls don't have access to it (which
+//  is different in linux). If that is desired, the strong definition must be
+//  exported and interception can be used from the rest of the dlls.
+//
+//   // libExample.cc
+//   WIN_WEAK_EXPORT_DEF(bool, compare, int a, int b) { return a > b; }
+//   // When initialized, check if the main executable defined "compare".
+//   int libExample_init() {
+//     uptr fnptr = __interception::InternalGetProcAddress(
+//         (void *)GetModuleHandleA(0), "compare");
+//     if (fnptr && !__interception::OverrideFunction((uptr)compare, fnptr, 0))
+//       abort();
+//     return 0;
+//   }
+//
+//   // client.cc
+//   WIN_WEAK_IMPORT_DEF(compare)
+//   // We override and export compare:
+//   extern "C" __declspec(dllexport) bool compare (int a, int b) {
+//     return a >= b;
+//   }
+//
+#endif // SANITIZER_WINDOWS
+#endif // SANITIZER_WIN_DEFS_H
diff --git a/lib/sanitizer_common/sanitizer_win_dll_thunk.cc b/lib/sanitizer_common/sanitizer_win_dll_thunk.cc
new file mode 100644
index 0000000..4fb4650
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win_dll_thunk.cc
@@ -0,0 +1,102 @@
+//===-- sanitizer_win_dll_thunk.cc ----------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This file defines a family of thunks that should be statically linked into
+// the DLLs that have instrumentation in order to delegate the calls to the
+// shared runtime that lives in the main binary.
+// See https://github.com/google/sanitizers/issues/209 for the details.
+//===----------------------------------------------------------------------===//
+
+#ifdef SANITIZER_DLL_THUNK
+#include "sanitizer_win_defs.h"
+#include "sanitizer_win_dll_thunk.h"
+#include "interception/interception.h"
+
+extern "C" {
+void *WINAPI GetModuleHandleA(const char *module_name);
+void abort();
+}
+
+namespace __sanitizer {
+uptr dllThunkGetRealAddrOrDie(const char *name) {
+  uptr ret =
+      __interception::InternalGetProcAddress((void *)GetModuleHandleA(0), name);
+  if (!ret)
+    abort();
+  return ret;
+}
+
+int dllThunkIntercept(const char* main_function, uptr dll_function) {
+  uptr wrapper = dllThunkGetRealAddrOrDie(main_function);
+  if (!__interception::OverrideFunction(dll_function, wrapper, 0))
+    abort();
+  return 0;
+}
+
+int dllThunkInterceptWhenPossible(const char* main_function,
+    const char* default_function, uptr dll_function) {
+  uptr wrapper = __interception::InternalGetProcAddress(
+    (void *)GetModuleHandleA(0), main_function);
+  if (!wrapper)
+    wrapper = dllThunkGetRealAddrOrDie(default_function);
+  if (!__interception::OverrideFunction(dll_function, wrapper, 0))
+    abort();
+  return 0;
+}
+} // namespace __sanitizer
+
+// Include Sanitizer Common interface.
+#define INTERFACE_FUNCTION(Name) INTERCEPT_SANITIZER_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "sanitizer_common_interface.inc"
+
+#pragma section(".DLLTH$A", read)  // NOLINT
+#pragma section(".DLLTH$Z", read)  // NOLINT
+
+typedef void (*DllThunkCB)();
+extern "C" {
+__declspec(allocate(".DLLTH$A")) DllThunkCB __start_dll_thunk;
+__declspec(allocate(".DLLTH$Z")) DllThunkCB __stop_dll_thunk;
+}
+
+// Disable compiler warnings that show up if we declare our own version
+// of a compiler intrinsic (e.g. strlen).
+#pragma warning(disable: 4391)
+#pragma warning(disable: 4392)
+
+extern "C" int __dll_thunk_init() {
+  static bool flag = false;
+  // __dll_thunk_init is expected to be called by only one thread.
+  if (flag) return 0;
+  flag = true;
+
+  for (DllThunkCB *it = &__start_dll_thunk; it < &__stop_dll_thunk; ++it)
+    if (*it)
+      (*it)();
+
+  // In DLLs, the callbacks are expected to return 0,
+  // otherwise CRT initialization fails.
+  return 0;
+}
+
+// We want to call dll_thunk_init before C/C++ initializers / constructors are
+// executed, otherwise functions like memset might be invoked.
+#pragma section(".CRT$XIB", long, read)  // NOLINT
+__declspec(allocate(".CRT$XIB")) int (*__dll_thunk_preinit)() =
+    __dll_thunk_init;
+
+static void WINAPI dll_thunk_thread_init(void *mod, unsigned long reason,
+                                         void *reserved) {
+  if (reason == /*DLL_PROCESS_ATTACH=*/1) __dll_thunk_init();
+}
+
+#pragma section(".CRT$XLAB", long, read)  // NOLINT
+__declspec(allocate(".CRT$XLAB")) void (WINAPI *__dll_thunk_tls_init)(void *,
+    unsigned long, void *) = dll_thunk_thread_init;
+
+#endif // SANITIZER_DLL_THUNK
diff --git a/lib/sanitizer_common/sanitizer_win_dll_thunk.h b/lib/sanitizer_common/sanitizer_win_dll_thunk.h
new file mode 100644
index 0000000..2f9ebda
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win_dll_thunk.h
@@ -0,0 +1,182 @@
+//===-- sanitizer_win_dll_thunk.h -----------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This header provide helper macros to delegate calls to the shared runtime
+// that lives in the main executable. It should be included to dll_thunks that
+// will be linked to the dlls, when the sanitizer is a static library included
+// in the main executable.
+//===----------------------------------------------------------------------===//
+#ifndef SANITIZER_WIN_DLL_THUNK_H
+#define SANITIZER_WIN_DLL_THUNK_H
+#include "sanitizer_internal_defs.h"
+
+namespace __sanitizer {
+uptr dllThunkGetRealAddrOrDie(const char *name);
+
+int dllThunkIntercept(const char* main_function, uptr dll_function);
+
+int dllThunkInterceptWhenPossible(const char* main_function,
+    const char* default_function, uptr dll_function);
+}
+
+extern "C" int __dll_thunk_init();
+
+// ----------------- Function interception helper macros -------------------- //
+// Override dll_function with main_function from main executable.
+#define INTERCEPT_OR_DIE(main_function, dll_function)                          \
+  static int intercept_##dll_function() {                                      \
+    return __sanitizer::dllThunkIntercept(main_function, (__sanitizer::uptr)   \
+        dll_function);                                                         \
+  }                                                                            \
+  __pragma(section(".DLLTH$M", long, read))                                    \
+  __declspec(allocate(".DLLTH$M")) int (*__dll_thunk_##dll_function)() =       \
+    intercept_##dll_function;
+
+// Try to override dll_function with main_function from main executable.
+// If main_function is not present, override dll_function with default_function.
+#define INTERCEPT_WHEN_POSSIBLE(main_function, default_function, dll_function) \
+  static int intercept_##dll_function() {                                      \
+    return __sanitizer::dllThunkInterceptWhenPossible(main_function,           \
+        default_function, (__sanitizer::uptr)dll_function);                    \
+  }                                                                            \
+  __pragma(section(".DLLTH$M", long, read))                                    \
+  __declspec(allocate(".DLLTH$M")) int (*__dll_thunk_##dll_function)() =       \
+    intercept_##dll_function;
+
+// -------------------- Function interception macros ------------------------ //
+// Special case of hooks -- ASan own interface functions.  Those are only called
+// after __asan_init, thus an empty implementation is sufficient.
+#define INTERCEPT_SANITIZER_FUNCTION(name)                                     \
+  extern "C" __declspec(noinline) void name() {                                \
+    volatile int prevent_icf = (__LINE__ << 8) ^ __COUNTER__;                  \
+    static const char function_name[] = #name;                                 \
+    for (const char* ptr = &function_name[0]; *ptr; ++ptr)                     \
+      prevent_icf ^= *ptr;                                                     \
+    (void)prevent_icf;                                                         \
+    __debugbreak();                                                            \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name)
+
+// Special case of hooks -- Weak functions, could be redefined in the main
+// executable, but that is not necessary, so we shouldn't die if we can not find
+// a reference. Instead, when the function is not present in the main executable
+// we consider the default impl provided by asan library.
+#define INTERCEPT_SANITIZER_WEAK_FUNCTION(name)                                \
+  extern "C" __declspec(noinline) void name() {                                \
+    volatile int prevent_icf = (__LINE__ << 8) ^ __COUNTER__;                  \
+    static const char function_name[] = #name;                                 \
+    for (const char* ptr = &function_name[0]; *ptr; ++ptr)                     \
+      prevent_icf ^= *ptr;                                                     \
+    (void)prevent_icf;                                                         \
+    __debugbreak();                                                            \
+  }                                                                            \
+  INTERCEPT_WHEN_POSSIBLE(#name, STRINGIFY(WEAK_EXPORT_NAME(name)), name)
+
+// We can't define our own version of strlen etc. because that would lead to
+// link-time or even type mismatch errors.  Instead, we can declare a function
+// just to be able to get its address.  Me may miss the first few calls to the
+// functions since it can be called before __dll_thunk_init, but that would lead
+// to false negatives in the startup code before user's global initializers,
+// which isn't a big deal.
+#define INTERCEPT_LIBRARY_FUNCTION(name)                                       \
+  extern "C" void name();                                                      \
+  INTERCEPT_OR_DIE(WRAPPER_NAME(name), name)
+
+// Use these macros for functions that could be called before __dll_thunk_init()
+// is executed and don't lead to errors if defined (free, malloc, etc).
+#define INTERCEPT_WRAP_V_V(name)                                               \
+  extern "C" void name() {                                                     \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    fn();                                                                      \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_V_W(name)                                               \
+  extern "C" void name(void *arg) {                                            \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    fn(arg);                                                                   \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_V_WW(name)                                              \
+  extern "C" void name(void *arg1, void *arg2) {                               \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    fn(arg1, arg2);                                                            \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_V_WWW(name)                                             \
+  extern "C" void name(void *arg1, void *arg2, void *arg3) {                   \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    fn(arg1, arg2, arg3);                                                      \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_V(name)                                               \
+  extern "C" void *name() {                                                    \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn();                                                               \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_W(name)                                               \
+  extern "C" void *name(void *arg) {                                           \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn(arg);                                                            \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_WW(name)                                              \
+  extern "C" void *name(void *arg1, void *arg2) {                              \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn(arg1, arg2);                                                     \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_WWW(name)                                             \
+  extern "C" void *name(void *arg1, void *arg2, void *arg3) {                  \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn(arg1, arg2, arg3);                                               \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_WWWW(name)                                            \
+  extern "C" void *name(void *arg1, void *arg2, void *arg3, void *arg4) {      \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn(arg1, arg2, arg3, arg4);                                         \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_WWWWW(name)                                           \
+  extern "C" void *name(void *arg1, void *arg2, void *arg3, void *arg4,        \
+                        void *arg5) {                                          \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn(arg1, arg2, arg3, arg4, arg5);                                   \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#define INTERCEPT_WRAP_W_WWWWWW(name)                                          \
+  extern "C" void *name(void *arg1, void *arg2, void *arg3, void *arg4,        \
+                        void *arg5, void *arg6) {                              \
+    typedef decltype(name) *fntype;                                            \
+    static fntype fn = (fntype)__sanitizer::dllThunkGetRealAddrOrDie(#name);   \
+    return fn(arg1, arg2, arg3, arg4, arg5, arg6);                             \
+  }                                                                            \
+  INTERCEPT_OR_DIE(#name, name);
+
+#endif // SANITIZER_WIN_DLL_THUNK_H
diff --git a/lib/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cc b/lib/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cc
new file mode 100644
index 0000000..f8f9164
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win_dynamic_runtime_thunk.cc
@@ -0,0 +1,21 @@
+//===-- santizer_win_dynamic_runtime_thunk.cc -----------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines things that need to be present in the application modules
+// to interact with Sanitizer Common, when it is included in a dll.
+//
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DYNAMIC_RUNTIME_THUNK
+#define SANITIZER_IMPORT_INTERFACE 1
+#include "sanitizer_win_defs.h"
+// Define weak alias for all weak functions imported from sanitizer common.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) WIN_WEAK_IMPORT_DEF(Name)
+#include "sanitizer_common_interface.inc"
+#endif // SANITIZER_DYNAMIC_RUNTIME_THUNK
diff --git a/lib/sanitizer_common/sanitizer_win_weak_interception.cc b/lib/sanitizer_common/sanitizer_win_weak_interception.cc
new file mode 100644
index 0000000..3643193
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win_weak_interception.cc
@@ -0,0 +1,94 @@
+//===-- sanitizer_win_weak_interception.cc --------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This module should be included in the sanitizer when it is implemented as a
+// shared library on Windows (dll), in order to delegate the calls of weak
+// functions to the implementation in the main executable when a strong
+// definition is provided.
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+#if SANITIZER_WINDOWS && SANITIZER_DYNAMIC
+#include "sanitizer_win_weak_interception.h"
+#include "sanitizer_allocator_interface.h"
+#include "sanitizer_interface_internal.h"
+#include "sanitizer_win_defs.h"
+#include "interception/interception.h"
+
+extern "C" {
+void *WINAPI GetModuleHandleA(const char *module_name);
+void abort();
+}
+
+namespace __sanitizer {
+// Try to get a pointer to real_function in the main module and override
+// dll_function with that pointer. If the function isn't found, nothing changes.
+int interceptWhenPossible(uptr dll_function, const char *real_function) {
+  uptr real = __interception::InternalGetProcAddress(
+      (void *)GetModuleHandleA(0), real_function);
+  if (real && !__interception::OverrideFunction((uptr)dll_function, real, 0))
+    abort();
+  return 0;
+}
+} // namespace __sanitizer
+
+// Declare weak hooks.
+extern "C" {
+void __sanitizer_weak_hook_memcmp(uptr called_pc, const void *s1,
+                                  const void *s2, uptr n, int result);
+void __sanitizer_weak_hook_strcmp(uptr called_pc, const char *s1,
+                                  const char *s2, int result);
+void __sanitizer_weak_hook_strncmp(uptr called_pc, const char *s1,
+                                   const char *s2, uptr n, int result);
+void __sanitizer_weak_hook_strstr(uptr called_pc, const char *s1,
+                                  const char *s2, char *result);
+}
+
+// Include Sanitizer Common interface.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "sanitizer_common_interface.inc"
+
+#pragma section(".WEAK$A", read)  // NOLINT
+#pragma section(".WEAK$Z", read)  // NOLINT
+
+typedef void (*InterceptCB)();
+extern "C" {
+__declspec(allocate(".WEAK$A")) InterceptCB __start_weak_list;
+__declspec(allocate(".WEAK$Z")) InterceptCB __stop_weak_list;
+}
+
+static int weak_intercept_init() {
+  static bool flag = false;
+  // weak_interception_init is expected to be called by only one thread.
+  if (flag) return 0;
+  flag = true;
+
+  for (InterceptCB *it = &__start_weak_list; it < &__stop_weak_list; ++it)
+    if (*it)
+      (*it)();
+
+  // In DLLs, the callbacks are expected to return 0,
+  // otherwise CRT initialization fails.
+  return 0;
+}
+
+#pragma section(".CRT$XIB", long, read)  // NOLINT
+__declspec(allocate(".CRT$XIB")) int (*__weak_intercept_preinit)() =
+    weak_intercept_init;
+
+static void WINAPI weak_intercept_thread_init(void *mod, unsigned long reason,
+                                              void *reserved) {
+  if (reason == /*DLL_PROCESS_ATTACH=*/1) weak_intercept_init();
+}
+
+#pragma section(".CRT$XLAB", long, read)  // NOLINT
+__declspec(allocate(".CRT$XLAB")) void(WINAPI *__weak_intercept_tls_init)(
+    void *, unsigned long, void *) = weak_intercept_thread_init;
+
+#endif // SANITIZER_WINDOWS && SANITIZER_DYNAMIC
diff --git a/lib/sanitizer_common/sanitizer_win_weak_interception.h b/lib/sanitizer_common/sanitizer_win_weak_interception.h
new file mode 100644
index 0000000..5b12297
--- /dev/null
+++ b/lib/sanitizer_common/sanitizer_win_weak_interception.h
@@ -0,0 +1,33 @@
+//===-- sanitizer_win_weak_interception.h ---------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This header provide helper macros to delegate calls of weak functions to the
+// implementation in the main executable when a strong definition is present.
+//===----------------------------------------------------------------------===//
+#ifndef SANITIZER_WIN_WEAK_INTERCEPTION_H
+#define SANITIZER_WIN_WEAK_INTERCEPTION_H
+#include "sanitizer_internal_defs.h"
+
+namespace __sanitizer {
+int interceptWhenPossible(uptr dll_function, const char *real_function);
+}
+
+// ----------------- Function interception helper macros -------------------- //
+// Weak functions, could be redefined in the main executable, but that is not
+// necessary, so we shouldn't die if we can not find a reference.
+#define INTERCEPT_WEAK(Name) interceptWhenPossible((uptr) Name, #Name);
+
+#define INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)                                \
+  static int intercept_##Name() {                                              \
+    return __sanitizer::interceptWhenPossible((__sanitizer::uptr) Name, #Name);\
+  }                                                                            \
+  __pragma(section(".WEAK$M", long, read))                                     \
+  __declspec(allocate(".WEAK$M")) int (*__weak_intercept_##Name)() =           \
+      intercept_##Name;
+
+#endif // SANITIZER_WIN_WEAK_INTERCEPTION_H
diff --git a/lib/sanitizer_common/scripts/check_lint.sh b/lib/sanitizer_common/scripts/check_lint.sh
index 9108a81..82e4bc8 100755
--- a/lib/sanitizer_common/scripts/check_lint.sh
+++ b/lib/sanitizer_common/scripts/check_lint.sh
@@ -18,7 +18,7 @@
 # Filters
 # TODO: remove some of these filters
 COMMON_LINT_FILTER=-build/include,-build/header_guard,-legal/copyright,-whitespace/comments,-readability/casting,\
--build/namespaces
+-build/namespaces,-readability/braces
 ASAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int
 ASAN_TEST_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/sizeof,-runtime/int,-runtime/printf,-runtime/threadsafe_fn
 ASAN_LIT_TEST_LINT_FILTER=${ASAN_TEST_LINT_FILTER},-whitespace/line_length
diff --git a/lib/sanitizer_common/scripts/sancov.py b/lib/sanitizer_common/scripts/sancov.py
index e19afdb..3560639 100755
--- a/lib/sanitizer_common/scripts/sancov.py
+++ b/lib/sanitizer_common/scripts/sancov.py
@@ -14,12 +14,14 @@
 prog_name = ""
 
 def Usage():
-  print >> sys.stderr, "Usage: \n" + \
-      " " + prog_name + " merge FILE [FILE...] > OUTPUT\n" \
-      " " + prog_name + " print FILE [FILE...]\n" \
-      " " + prog_name + " unpack FILE [FILE...]\n" \
-      " " + prog_name + " rawunpack FILE [FILE ...]\n" \
-      " " + prog_name + " missing BINARY < LIST_OF_PCS\n"
+  sys.stderr.write(
+    "Usage: \n" + \
+    " " + prog_name + " merge FILE [FILE...] > OUTPUT\n" \
+    " " + prog_name + " print FILE [FILE...]\n" \
+    " " + prog_name + " unpack FILE [FILE...]\n" \
+    " " + prog_name + " rawunpack FILE [FILE ...]\n" \
+    " " + prog_name + " missing BINARY < LIST_OF_PCS\n" \
+    "\n")
   exit(1)
 
 def CheckBits(bits):
@@ -68,16 +70,19 @@
       raise Exception('File %s is short (< 8 bytes)' % path)
     bits = ReadMagicAndReturnBitness(f, path)
     size -= 8
-    s = struct.unpack_from(TypeCodeForStruct(bits) * (size * 8 / bits), f.read(size))
-  print >>sys.stderr, "%s: read %d %d-bit PCs from %s" % (prog_name, size * 8 / bits, bits, path)
+    w = size * 8 // bits
+    s = struct.unpack_from(TypeCodeForStruct(bits) * (w), f.read(size))
+  sys.stderr.write(
+    "%s: read %d %d-bit PCs from %s\n" % (prog_name, w, bits, path))
   return s
 
 def Merge(files):
   s = set()
   for f in files:
     s = s.union(set(ReadOneFile(f)))
-  print >> sys.stderr, "%s: %d files merged; %d PCs total" % \
-    (prog_name, len(files), len(s))
+  sys.stderr.write(
+    "%s: %d files merged; %d PCs total\n" % (prog_name, len(files), len(s))
+  )
   return sorted(s)
 
 def PrintFiles(files):
@@ -85,10 +90,9 @@
     s = Merge(files)
   else:  # If there is just on file, print the PCs in order.
     s = ReadOneFile(files[0])
-    print >> sys.stderr, "%s: 1 file merged; %d PCs total" % \
-      (prog_name, len(s))
+    sys.stderr.write("%s: 1 file merged; %d PCs total\n" % (prog_name, len(s)))
   for i in s:
-    print "0x%x" % i
+    print("0x%x" % i)
 
 def MergeAndPrint(files):
   if sys.stdout.isatty():
@@ -97,27 +101,27 @@
   bits = 32
   if max(s) > 0xFFFFFFFF:
     bits = 64
-  array.array('I', MagicForBits(bits)).tofile(sys.stdout)
+  stdout_buf = getattr(sys.stdout, 'buffer', sys.stdout)
+  array.array('I', MagicForBits(bits)).tofile(stdout_buf)
   a = struct.pack(TypeCodeForStruct(bits) * len(s), *s)
-  sys.stdout.write(a)
+  stdout_buf.write(a)
 
 
 def UnpackOneFile(path):
   with open(path, mode="rb") as f:
-    print >> sys.stderr, "%s: unpacking %s" % (prog_name, path)
+    sys.stderr.write("%s: unpacking %s\n" % (prog_name, path))
     while True:
       header = f.read(12)
       if not header: return
       if len(header) < 12:
         break
       pid, module_length, blob_size = struct.unpack('iII', header)
-      module = f.read(module_length)
+      module = f.read(module_length).decode('utf-8')
       blob = f.read(blob_size)
       assert(len(module) == module_length)
       assert(len(blob) == blob_size)
       extracted_file = "%s.%d.sancov" % (module, pid)
-      print >> sys.stderr, "%s: extracting %s" % \
-        (prog_name, extracted_file)
+      sys.stderr.write("%s: extracting %s\n" % (prog_name, extracted_file))
       # The packed file may contain multiple blobs for the same pid/module
       # pair. Append to the end of the file instead of overwriting.
       with open(extracted_file, 'ab') as f2:
@@ -133,7 +137,7 @@
 def UnpackOneRawFile(path, map_path):
   mem_map = []
   with open(map_path, mode="rt") as f_map:
-    print >> sys.stderr, "%s: reading map %s" % (prog_name, map_path)
+    sys.stderr.write("%s: reading map %s\n" % (prog_name, map_path))
     bits = int(f_map.readline())
     if bits != 32 and bits != 64:
       raise Exception('Wrong bits size in the map')
@@ -147,12 +151,12 @@
   mem_map_keys = [m[0] for m in mem_map]
 
   with open(path, mode="rb") as f:
-    print >> sys.stderr, "%s: unpacking %s" % (prog_name, path)
+    sys.stderr.write("%s: unpacking %s\n" % (prog_name, path))
 
     f.seek(0, 2)
     size = f.tell()
     f.seek(0, 0)
-    pcs = struct.unpack_from(TypeCodeForStruct(bits) * (size * 8 / bits), f.read(size))
+    pcs = struct.unpack_from(TypeCodeForStruct(bits) * (size * 8 // bits), f.read(size))
     mem_map_pcs = [[] for i in range(0, len(mem_map))]
 
     for pc in pcs:
@@ -161,7 +165,7 @@
       (start, end, base, module_path) = mem_map[map_idx]
       assert pc >= start
       if pc >= end:
-        print >> sys.stderr, "warning: %s: pc %x outside of any known mapping" % (prog_name, pc)
+        sys.stderr.write("warning: %s: pc %x outside of any known mapping\n" % (prog_name, pc))
         continue
       mem_map_pcs[map_idx].append(pc - base)
 
@@ -169,7 +173,7 @@
       if len(pc_list) == 0: continue
       assert path.endswith('.sancov.raw')
       dst_path = module_path + '.' + os.path.basename(path)[:-4]
-      print >> sys.stderr, "%s: writing %d PCs to %s" % (prog_name, len(pc_list), dst_path)
+      sys.stderr.write("%s: writing %d PCs to %s\n" % (prog_name, len(pc_list), dst_path))
       sorted_pc_list = sorted(pc_list)
       pc_buffer = struct.pack(TypeCodeForStruct(bits) * len(pc_list), *sorted_pc_list)
       with open(dst_path, 'ab+') as f2:
@@ -190,7 +194,7 @@
   # - with call or callq,
   # - directly or via PLT.
   cmd = "objdump -d %s | " \
-        "grep '^\s\+[0-9a-f]\+:.*\scall\(q\|\)\s\+[0-9a-f]\+ <__sanitizer_cov\(_with_check\|\)\(@plt\|\)>' | " \
+        "grep '^\s\+[0-9a-f]\+:.*\scall\(q\|\)\s\+[0-9a-f]\+ <__sanitizer_cov\(_with_check\|\|_trace_pc_guard\)\(@plt\|\)>' | " \
         "grep '^\s\+[0-9a-f]\+' -o" % binary
   proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                           shell=True)
@@ -204,18 +208,19 @@
   if not os.path.isfile(binary):
     raise Exception('File not found: %s' % binary)
   instrumented = GetInstrumentedPCs(binary)
-  print >> sys.stderr, "%s: found %d instrumented PCs in %s" % (prog_name,
-                                                                len(instrumented),
-                                                                binary)
+  sys.stderr.write("%s: found %d instrumented PCs in %s\n" % (prog_name,
+                                                              len(instrumented),
+                                                              binary))
   covered = set(int(line, 16) for line in sys.stdin)
-  print >> sys.stderr, "%s: read %d PCs from stdin" % (prog_name, len(covered))
+  sys.stderr.write("%s: read %d PCs from stdin\n" % (prog_name, len(covered)))
   missing = instrumented - covered
-  print >> sys.stderr, "%s: %d PCs missing from coverage" % (prog_name, len(missing))
+  sys.stderr.write("%s: %d PCs missing from coverage\n" % (prog_name, len(missing)))
   if (len(missing) > len(instrumented) - len(covered)):
-    print >> sys.stderr, \
-        "%s: WARNING: stdin contains PCs not found in binary" % prog_name
+    sys.stderr.write(
+      "%s: WARNING: stdin contains PCs not found in binary\n" % prog_name
+    )
   for pc in sorted(missing):
-    print "0x%x" % pc
+    print("0x%x" % pc)
 
 if __name__ == '__main__':
   prog_name = sys.argv[0]
diff --git a/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cc b/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cc
index bd315a0..b25a53d 100644
--- a/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cc
+++ b/lib/sanitizer_common/symbolizer/sanitizer_symbolize.cc
@@ -18,8 +18,9 @@
 #include "llvm/DebugInfo/Symbolize/Symbolize.h"
 
 static llvm::symbolize::LLVMSymbolizer *getDefaultSymbolizer() {
-  static llvm::symbolize::LLVMSymbolizer DefaultSymbolizer;
-  return &DefaultSymbolizer;
+  static llvm::symbolize::LLVMSymbolizer *DefaultSymbolizer =
+      new llvm::symbolize::LLVMSymbolizer();
+  return DefaultSymbolizer;
 }
 
 namespace __sanitizer {
@@ -41,8 +42,8 @@
         getDefaultSymbolizer()->symbolizeInlinedCode(ModuleName, ModuleOffset);
     Printer << (ResOrErr ? ResOrErr.get() : llvm::DIInliningInfo());
   }
-  __sanitizer::internal_snprintf(Buffer, MaxLength, "%s", Result.c_str());
-  return true;
+  return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
+                                        Result.c_str()) < MaxLength;
 }
 
 bool __sanitizer_symbolize_data(const char *ModuleName, uint64_t ModuleOffset,
@@ -55,8 +56,8 @@
         getDefaultSymbolizer()->symbolizeData(ModuleName, ModuleOffset);
     Printer << (ResOrErr ? ResOrErr.get() : llvm::DIGlobal());
   }
-  __sanitizer::internal_snprintf(Buffer, MaxLength, "%s", Result.c_str());
-  return true;
+  return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
+                                        Result.c_str()) < MaxLength;
 }
 
 void __sanitizer_symbolize_flush() { getDefaultSymbolizer()->flush(); }
@@ -65,8 +66,10 @@
                                    int MaxLength) {
   std::string Result =
       llvm::symbolize::LLVMSymbolizer::DemangleName(Name, nullptr);
-  __sanitizer::internal_snprintf(Buffer, MaxLength, "%s", Result.c_str());
-  return static_cast<int>(Result.size() + 1);
+  return __sanitizer::internal_snprintf(Buffer, MaxLength, "%s",
+                                        Result.c_str()) < MaxLength
+             ? static_cast<int>(Result.size() + 1)
+             : 0;
 }
 
 }  // extern "C"
diff --git a/lib/sanitizer_common/symbolizer/sanitizer_wrappers.cc b/lib/sanitizer_common/symbolizer/sanitizer_wrappers.cc
index 0a796d9..66d089a 100644
--- a/lib/sanitizer_common/symbolizer/sanitizer_wrappers.cc
+++ b/lib/sanitizer_common/symbolizer/sanitizer_wrappers.cc
@@ -172,4 +172,28 @@
 LLVM_SYMBOLIZER_INTERCEPTOR4(pread64, ssize_t(int, void *, size_t, off64_t))
 LLVM_SYMBOLIZER_INTERCEPTOR2(realpath, char *(const char *, char *))
 
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_cond_broadcast, int(pthread_cond_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR2(pthread_cond_wait,
+                             int(pthread_cond_t *, pthread_mutex_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_mutex_lock, int(pthread_mutex_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_mutex_unlock, int(pthread_mutex_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_mutex_destroy, int(pthread_mutex_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR2(pthread_mutex_init,
+                             int(pthread_mutex_t *,
+                                 const pthread_mutexattr_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_mutexattr_destroy,
+                             int(pthread_mutexattr_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_mutexattr_init, int(pthread_mutexattr_t *))
+LLVM_SYMBOLIZER_INTERCEPTOR2(pthread_mutexattr_settype,
+                             int(pthread_mutexattr_t *, int))
+LLVM_SYMBOLIZER_INTERCEPTOR1(pthread_getspecific, void *(pthread_key_t))
+LLVM_SYMBOLIZER_INTERCEPTOR2(pthread_key_create,
+                             int(pthread_key_t *, void (*)(void *)))
+LLVM_SYMBOLIZER_INTERCEPTOR2(pthread_once,
+                             int(pthread_once_t *, void (*)(void)))
+LLVM_SYMBOLIZER_INTERCEPTOR2(pthread_setspecific,
+                             int(pthread_key_t, const void *))
+LLVM_SYMBOLIZER_INTERCEPTOR3(pthread_sigmask,
+                             int(int, const sigset_t *, sigset_t *))
+
 }  // extern "C"
diff --git a/lib/sanitizer_common/symbolizer/scripts/ar_to_bc.sh b/lib/sanitizer_common/symbolizer/scripts/ar_to_bc.sh
new file mode 100755
index 0000000..788cef8
--- /dev/null
+++ b/lib/sanitizer_common/symbolizer/scripts/ar_to_bc.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+function usage() {
+  echo "Usage: $0 INPUT... OUTPUT"
+  exit 1
+}
+
+if [ "$#" -le 1 ]; then
+  usage
+fi
+
+AR=$(readlink -f $AR)
+LINK=$(readlink -f $LINK)
+
+INPUTS=
+OUTPUT=
+for ARG in $@; do
+  INPUTS="$INPUTS $OUTPUT"
+  OUTPUT=$(readlink -f $ARG)
+done
+
+echo Inputs: $INPUTS
+echo Output: $OUTPUT
+
+SCRATCH_DIR=$(mktemp -d)
+ln -s $INPUTS $SCRATCH_DIR/
+
+pushd $SCRATCH_DIR
+
+for INPUT in *; do
+  for OBJ in $($AR t $INPUT); do
+    $AR x $INPUT $OBJ
+    mv -f $OBJ $(basename $INPUT).$OBJ
+  done
+done
+
+$LINK *.o -o $OUTPUT
+
+rm -rf $SCRATCH_DIR
diff --git a/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh b/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh
index 07239eb..c5865ec 100755
--- a/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh
+++ b/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh
@@ -58,9 +58,9 @@
 CC=$CLANG_DIR/clang
 CXX=$CLANG_DIR/clang++
 TBLGEN=$CLANG_DIR/llvm-tblgen
-LINK=$CLANG_DIR/llvm-link
 OPT=$CLANG_DIR/opt
-AR=$CLANG_DIR/llvm-ar
+export AR=$CLANG_DIR/llvm-ar
+export LINK=$CLANG_DIR/llvm-link
 
 for F in $CC $CXX $TBLGEN $LINK $OPT $AR; do
   if [[ ! -x "$F" ]]; then
@@ -129,36 +129,34 @@
   $LLVM_SRC
 fi
 cd ${LLVM_BUILD}
-ninja LLVMSymbolize LLVMObject LLVMDebugInfoDWARF LLVMSupport LLVMDebugInfoPDB LLVMMC
+ninja LLVMSymbolize LLVMObject LLVMBinaryFormat LLVMDebugInfoDWARF LLVMSupport LLVMDebugInfoPDB LLVMMC
 
 cd ${BUILD_DIR}
 rm -rf ${SYMBOLIZER_BUILD}
 mkdir ${SYMBOLIZER_BUILD}
 cd ${SYMBOLIZER_BUILD}
 
-for A in $LIBCXX_BUILD/lib/libc++.a \
-         $LIBCXX_BUILD/lib/libc++abi.a \
-         $LLVM_BUILD/lib/libLLVMSymbolize.a \
-         $LLVM_BUILD/lib/libLLVMObject.a \
-         $LLVM_BUILD/lib/libLLVMDebugInfoDWARF.a \
-         $LLVM_BUILD/lib/libLLVMSupport.a \
-         $LLVM_BUILD/lib/libLLVMDebugInfoPDB.a \
-         $LLVM_BUILD/lib/libLLVMMC.a \
-         $ZLIB_BUILD/libz.a ; do
-  for O in $($AR t $A); do
-    $AR x $A $O
-    mv -f $O "$(basename $A).$O" # Rename to avoid collisions between libs.
-  done
-done
-
 echo "Compiling..."
 SYMBOLIZER_FLAGS="$FLAGS -std=c++11 -I${LLVM_SRC}/include -I${LLVM_BUILD}/include -I${LIBCXX_BUILD}/include/c++/v1"
 $CXX $SYMBOLIZER_FLAGS ${SRC_DIR}/sanitizer_symbolize.cc ${SRC_DIR}/sanitizer_wrappers.cc -c
+$AR rc symbolizer.a sanitizer_symbolize.o sanitizer_wrappers.o
 
 SYMBOLIZER_API_LIST=__sanitizer_symbolize_code,__sanitizer_symbolize_data,__sanitizer_symbolize_flush,__sanitizer_symbolize_demangle
 
 # Merge all the object files together and copy the resulting library back.
-$LINK *.o -o all.bc
+$SCRIPT_DIR/ar_to_bc.sh $LIBCXX_BUILD/lib/libc++.a \
+                        $LIBCXX_BUILD/lib/libc++abi.a \
+                        $LLVM_BUILD/lib/libLLVMSymbolize.a \
+                        $LLVM_BUILD/lib/libLLVMObject.a \
+                        $LLVM_BUILD/lib/libLLVMBinaryFormat.a \
+                        $LLVM_BUILD/lib/libLLVMDebugInfoDWARF.a \
+                        $LLVM_BUILD/lib/libLLVMSupport.a \
+                        $LLVM_BUILD/lib/libLLVMDebugInfoPDB.a \
+                        $LLVM_BUILD/lib/libLLVMMC.a \
+                        $ZLIB_BUILD/libz.a \
+                        symbolizer.a \
+                        all.bc
+
 echo "Optimizing..."
 $OPT -internalize -internalize-public-api-list=${SYMBOLIZER_API_LIST} all.bc -o opt.bc
 $CC $FLAGS -fno-lto -c opt.bc -o symbolizer.o
diff --git a/lib/sanitizer_common/symbolizer/scripts/global_symbols.txt b/lib/sanitizer_common/symbolizer/scripts/global_symbols.txt
index 033acf7..a23c953 100644
--- a/lib/sanitizer_common/symbolizer/scripts/global_symbols.txt
+++ b/lib/sanitizer_common/symbolizer/scripts/global_symbols.txt
@@ -37,6 +37,7 @@
 cfgetospeed U
 dl_iterate_phdr U
 dlsym U
+dup U
 dup2 U
 environ U
 execv U
@@ -58,6 +59,7 @@
 getpid U
 gettimeofday U
 ioctl U
+isalpha U
 isatty U
 isprint U
 isupper U
diff --git a/lib/sanitizer_common/tests/CMakeLists.txt b/lib/sanitizer_common/tests/CMakeLists.txt
index 20698b9..2acedd0 100644
--- a/lib/sanitizer_common/tests/CMakeLists.txt
+++ b/lib/sanitizer_common/tests/CMakeLists.txt
@@ -26,6 +26,7 @@
   sanitizer_posix_test.cc
   sanitizer_printf_test.cc
   sanitizer_procmaps_test.cc
+  sanitizer_quarantine_test.cc
   sanitizer_stackdepot_test.cc
   sanitizer_stacktrace_printer_test.cc
   sanitizer_stacktrace_test.cc
@@ -145,6 +146,15 @@
 # Adds sanitizer tests for architecture.
 macro(add_sanitizer_tests_for_arch arch)
   get_target_flags_for_arch(${arch} TARGET_FLAGS)
+
+  # If the sanitizer library was built with _FILE_OFFSET_BITS=64 we need
+  # to ensure that the library and tests agree on the layout of certain
+  # structures such as 'struct stat'.
+  if( CMAKE_SIZEOF_VOID_P EQUAL 4 )
+    list(APPEND TARGET_FLAGS "-D_LARGEFILE_SOURCE")
+    list(APPEND TARGET_FLAGS "-D_FILE_OFFSET_BITS=64")
+  endif()
+
   set(SANITIZER_TEST_SOURCES ${SANITIZER_UNITTESTS}
                              ${COMPILER_RT_GTEST_SOURCE})
   set(SANITIZER_TEST_COMPILE_DEPS ${SANITIZER_TEST_HEADERS})
diff --git a/lib/sanitizer_common/tests/sanitizer_allocator_test.cc b/lib/sanitizer_common/tests/sanitizer_allocator_test.cc
index 8df5efd..0def8ee 100644
--- a/lib/sanitizer_common/tests/sanitizer_allocator_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_allocator_test.cc
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <algorithm>
 #include <vector>
+#include <random>
 #include <set>
 
 using namespace __sanitizer;
@@ -107,13 +108,17 @@
 static const uptr kRegionSizeLog = FIRST_32_SECOND_64(20, 24);
 static const uptr kFlatByteMapSize = kAddressSpaceSize >> kRegionSizeLog;
 
-typedef SizeClassAllocator32<
-  0, kAddressSpaceSize,
-  /*kMetadataSize*/16,
-  CompactSizeClassMap,
-  kRegionSizeLog,
-  FlatByteMap<kFlatByteMapSize> >
-  Allocator32Compact;
+struct AP32Compact {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = kAddressSpaceSize;
+  static const uptr kMetadataSize = 16;
+  typedef CompactSizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = ::kRegionSizeLog;
+  typedef FlatByteMap<kFlatByteMapSize> ByteMap;
+  typedef NoOpMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+typedef SizeClassAllocator32<AP32Compact> Allocator32Compact;
 
 template <class SizeClassMap>
 void TestSizeClassMap() {
@@ -385,17 +390,21 @@
 #endif
 #endif
 
+struct AP32WithCallback {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = kAddressSpaceSize;
+  static const uptr kMetadataSize = 16;
+  typedef CompactSizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = ::kRegionSizeLog;
+  typedef FlatByteMap<kFlatByteMapSize> ByteMap;
+  typedef TestMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+
 TEST(SanitizerCommon, SizeClassAllocator32MapUnmapCallback) {
   TestMapUnmapCallback::map_count = 0;
   TestMapUnmapCallback::unmap_count = 0;
-  typedef SizeClassAllocator32<
-      0, kAddressSpaceSize,
-      /*kMetadataSize*/16,
-      CompactSizeClassMap,
-      kRegionSizeLog,
-      FlatByteMap<kFlatByteMapSize>,
-      TestMapUnmapCallback>
-    Allocator32WithCallBack;
+  typedef SizeClassAllocator32<AP32WithCallback> Allocator32WithCallBack;
   Allocator32WithCallBack *a = new Allocator32WithCallBack;
   a->Init(kReleaseToOSIntervalNever);
   EXPECT_EQ(TestMapUnmapCallback::map_count, 0);
@@ -417,8 +426,8 @@
 TEST(SanitizerCommon, LargeMmapAllocatorMapUnmapCallback) {
   TestMapUnmapCallback::map_count = 0;
   TestMapUnmapCallback::unmap_count = 0;
-  LargeMmapAllocator<TestMapUnmapCallback> a;
-  a.Init(/* may_return_null */ false);
+  LargeMmapAllocator<TestMapUnmapCallback, DieOnFailure> a;
+  a.Init();
   AllocatorStats stats;
   stats.Init();
   void *x = a.Allocate(&stats, 1 << 20, 1);
@@ -427,35 +436,36 @@
   EXPECT_EQ(TestMapUnmapCallback::unmap_count, 1);
 }
 
-template<class Allocator>
-void FailInAssertionOnOOM() {
-  Allocator a;
-  a.Init(kReleaseToOSIntervalNever);
-  SizeClassAllocatorLocalCache<Allocator> cache;
-  memset(&cache, 0, sizeof(cache));
-  cache.Init(0);
-  AllocatorStats stats;
-  stats.Init();
-  const size_t kNumChunks = 128;
-  uint32_t chunks[kNumChunks];
-  for (int i = 0; i < 1000000; i++) {
-    a.GetFromAllocator(&stats, 52, chunks, kNumChunks);
-  }
-
-  a.TestOnlyUnmap();
-}
-
 // Don't test OOM conditions on Win64 because it causes other tests on the same
 // machine to OOM.
 #if SANITIZER_CAN_USE_ALLOCATOR64 && !SANITIZER_WINDOWS64 && !SANITIZER_ANDROID
 TEST(SanitizerCommon, SizeClassAllocator64Overflow) {
-  EXPECT_DEATH(FailInAssertionOnOOM<Allocator64>(), "Out of memory");
+  Allocator64 a;
+  a.Init(kReleaseToOSIntervalNever);
+  SizeClassAllocatorLocalCache<Allocator64> cache;
+  memset(&cache, 0, sizeof(cache));
+  cache.Init(0);
+  AllocatorStats stats;
+  stats.Init();
+
+  const size_t kNumChunks = 128;
+  uint32_t chunks[kNumChunks];
+  bool allocation_failed = false;
+  for (int i = 0; i < 1000000; i++) {
+    if (!a.GetFromAllocator(&stats, 52, chunks, kNumChunks)) {
+      allocation_failed = true;
+      break;
+    }
+  }
+  EXPECT_EQ(allocation_failed, true);
+
+  a.TestOnlyUnmap();
 }
 #endif
 
 TEST(SanitizerCommon, LargeMmapAllocator) {
-  LargeMmapAllocator<> a;
-  a.Init(/* may_return_null */ false);
+  LargeMmapAllocator<NoOpMapUnmapCallback, DieOnFailure> a;
+  a.Init();
   AllocatorStats stats;
   stats.Init();
 
@@ -537,8 +547,10 @@
   typedef
       CombinedAllocator<PrimaryAllocator, AllocatorCache, SecondaryAllocator>
       Allocator;
+  SetAllocatorMayReturnNull(true);
   Allocator *a = new Allocator;
-  a->Init(/* may_return_null */ true, kReleaseToOSIntervalNever);
+  a->Init(kReleaseToOSIntervalNever);
+  std::mt19937 r;
 
   AllocatorCache cache;
   memset(&cache, 0, sizeof(cache));
@@ -551,7 +563,7 @@
   EXPECT_EQ(a->Allocate(&cache, (uptr)-1 - 1023, 1024), (void*)0);
 
   // Set to false
-  a->SetMayReturnNull(false);
+  SetAllocatorMayReturnNull(false);
   EXPECT_DEATH(a->Allocate(&cache, -1, 1),
                "allocator is terminating the process");
 
@@ -570,7 +582,7 @@
       allocated.push_back(x);
     }
 
-    random_shuffle(allocated.begin(), allocated.end());
+    std::shuffle(allocated.begin(), allocated.end(), r);
 
     for (uptr i = 0; i < kNumAllocs; i++) {
       void *x = allocated[i];
@@ -863,8 +875,8 @@
 }
 
 TEST(SanitizerCommon, LargeMmapAllocatorIteration) {
-  LargeMmapAllocator<> a;
-  a.Init(/* may_return_null */ false);
+  LargeMmapAllocator<NoOpMapUnmapCallback, DieOnFailure> a;
+  a.Init();
   AllocatorStats stats;
   stats.Init();
 
@@ -890,8 +902,8 @@
 }
 
 TEST(SanitizerCommon, LargeMmapAllocatorBlockBegin) {
-  LargeMmapAllocator<> a;
-  a.Init(/* may_return_null */ false);
+  LargeMmapAllocator<NoOpMapUnmapCallback, DieOnFailure> a;
+  a.Init();
   AllocatorStats stats;
   stats.Init();
 
@@ -959,9 +971,9 @@
   const uptr kAllocationSize = SpecialSizeClassMap::Size(kClassID);
   ASSERT_LT(2 * kAllocationSize, kRegionSize);
   ASSERT_GT(3 * kAllocationSize, kRegionSize);
-  cache.Allocate(a, kClassID);
-  EXPECT_DEATH(cache.Allocate(a, kClassID) && cache.Allocate(a, kClassID),
-               "The process has exhausted");
+  EXPECT_NE(cache.Allocate(a, kClassID), nullptr);
+  EXPECT_NE(cache.Allocate(a, kClassID), nullptr);
+  EXPECT_EQ(cache.Allocate(a, kClassID), nullptr);
 
   const uptr Class2 = 100;
   const uptr Size2 = SpecialSizeClassMap::Size(Class2);
@@ -969,11 +981,12 @@
   char *p[7];
   for (int i = 0; i < 7; i++) {
     p[i] = (char*)cache.Allocate(a, Class2);
+    EXPECT_NE(p[i], nullptr);
     fprintf(stderr, "p[%d] %p s = %lx\n", i, (void*)p[i], Size2);
     p[i][Size2 - 1] = 42;
     if (i) ASSERT_LT(p[i - 1], p[i]);
   }
-  EXPECT_DEATH(cache.Allocate(a, Class2), "The process has exhausted");
+  EXPECT_EQ(cache.Allocate(a, Class2), nullptr);
   cache.Deallocate(a, Class2, p[0]);
   cache.Drain(a);
   ASSERT_EQ(p[6][Size2 - 1], 42);
diff --git a/lib/sanitizer_common/tests/sanitizer_bitvector_test.cc b/lib/sanitizer_common/tests/sanitizer_bitvector_test.cc
index 706b4c5..669365b 100644
--- a/lib/sanitizer_common/tests/sanitizer_bitvector_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_bitvector_test.cc
@@ -19,6 +19,7 @@
 
 #include <algorithm>
 #include <vector>
+#include <random>
 #include <set>
 
 using namespace __sanitizer;
@@ -61,20 +62,21 @@
   t.copyFrom(bv);
   while (!t.empty()) {
     uptr idx = t.getAndClearFirstOne();
-    fprintf(stderr, "%zd ", idx);
+    fprintf(stderr, "%lu ", idx);
   }
   fprintf(stderr, "\n");
 }
 
 void Print(const set<uptr> &s) {
   for (set<uptr>::iterator it = s.begin(); it != s.end(); ++it) {
-    fprintf(stderr, "%zd ", *it);
+    fprintf(stderr, "%lu ", *it);
   }
   fprintf(stderr, "\n");
 }
 
 template <class BV>
 void TestBitVector(uptr expected_size) {
+  std::mt19937 r;
   BV bv, bv1, t_bv;
   EXPECT_EQ(expected_size, BV::kSize);
   bv.clear();
@@ -112,7 +114,7 @@
   for (uptr it = 0; it < 30; it++) {
     // iota
     for (size_t j = 0; j < bits.size(); j++) bits[j] = j;
-    random_shuffle(bits.begin(), bits.end());
+    std::shuffle(bits.begin(), bits.end(), r);
     set<uptr> s, s1, t_s;
     bv.clear();
     bv1.clear();
diff --git a/lib/sanitizer_common/tests/sanitizer_common_test.cc b/lib/sanitizer_common/tests/sanitizer_common_test.cc
index ebc885d..93a8794 100644
--- a/lib/sanitizer_common/tests/sanitizer_common_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_common_test.cc
@@ -72,12 +72,12 @@
   EXPECT_TRUE(IsSorted(array, 2));
 }
 
-TEST(SanitizerCommon, MmapAlignedOrDie) {
+TEST(SanitizerCommon, MmapAlignedOrDieOnFatalError) {
   uptr PageSize = GetPageSizeCached();
   for (uptr size = 1; size <= 32; size *= 2) {
     for (uptr alignment = 1; alignment <= 32; alignment *= 2) {
       for (int iter = 0; iter < 100; iter++) {
-        uptr res = (uptr)MmapAlignedOrDie(
+        uptr res = (uptr)MmapAlignedOrDieOnFatalError(
             size * PageSize, alignment * PageSize, "MmapAlignedOrDieTest");
         EXPECT_EQ(0U, res % (alignment * PageSize));
         internal_memset((void*)res, 1, size * PageSize);
@@ -300,4 +300,21 @@
   EXPECT_STREQ("012345678", str.data());
 }
 
+#if SANITIZER_LINUX
+TEST(SanitizerCommon, GetRandom) {
+  u8 buffer_1[32], buffer_2[32];
+  EXPECT_FALSE(GetRandom(nullptr, 32));
+  EXPECT_FALSE(GetRandom(buffer_1, 0));
+  EXPECT_FALSE(GetRandom(buffer_1, 512));
+  EXPECT_EQ(ARRAY_SIZE(buffer_1), ARRAY_SIZE(buffer_2));
+  for (uptr size = 4; size <= ARRAY_SIZE(buffer_1); size += 4) {
+    for (uptr i = 0; i < 100; i++) {
+      EXPECT_TRUE(GetRandom(buffer_1, size));
+      EXPECT_TRUE(GetRandom(buffer_2, size));
+      EXPECT_NE(internal_memcmp(buffer_1, buffer_2, size), 0);
+    }
+  }
+}
+#endif
+
 }  // namespace __sanitizer
diff --git a/lib/sanitizer_common/tests/sanitizer_flags_test.cc b/lib/sanitizer_common/tests/sanitizer_flags_test.cc
index 24a3f3d..f3fe139 100644
--- a/lib/sanitizer_common/tests/sanitizer_flags_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_flags_test.cc
@@ -59,6 +59,38 @@
   TestFlag(true, "flag_name=0", false);
   TestFlag(true, "flag_name=no", false);
   TestFlag(true, "flag_name=false", false);
+
+  EXPECT_DEATH(TestFlag(false, "flag_name", true), "expected '='");
+  EXPECT_DEATH(TestFlag(false, "flag_name=", true),
+               "Invalid value for bool option: ''");
+  EXPECT_DEATH(TestFlag(false, "flag_name=2", true),
+               "Invalid value for bool option: '2'");
+  EXPECT_DEATH(TestFlag(false, "flag_name=-1", true),
+               "Invalid value for bool option: '-1'");
+  EXPECT_DEATH(TestFlag(false, "flag_name=on", true),
+               "Invalid value for bool option: 'on'");
+}
+
+TEST(SanitizerCommon, HandleSignalMode) {
+  TestFlag(kHandleSignalNo, "flag_name=1", kHandleSignalYes);
+  TestFlag(kHandleSignalNo, "flag_name=yes", kHandleSignalYes);
+  TestFlag(kHandleSignalNo, "flag_name=true", kHandleSignalYes);
+  TestFlag(kHandleSignalYes, "flag_name=0", kHandleSignalNo);
+  TestFlag(kHandleSignalYes, "flag_name=no", kHandleSignalNo);
+  TestFlag(kHandleSignalYes, "flag_name=false", kHandleSignalNo);
+  TestFlag(kHandleSignalNo, "flag_name=2", kHandleSignalExclusive);
+  TestFlag(kHandleSignalYes, "flag_name=exclusive", kHandleSignalExclusive);
+
+  EXPECT_DEATH(TestFlag(kHandleSignalNo, "flag_name", kHandleSignalNo),
+               "expected '='");
+  EXPECT_DEATH(TestFlag(kHandleSignalNo, "flag_name=", kHandleSignalNo),
+               "Invalid value for signal handler option: ''");
+  EXPECT_DEATH(TestFlag(kHandleSignalNo, "flag_name=3", kHandleSignalNo),
+               "Invalid value for signal handler option: '3'");
+  EXPECT_DEATH(TestFlag(kHandleSignalNo, "flag_name=-1", kHandleSignalNo),
+               "Invalid value for signal handler option: '-1'");
+  EXPECT_DEATH(TestFlag(kHandleSignalNo, "flag_name=on", kHandleSignalNo),
+               "Invalid value for signal handler option: 'on'");
 }
 
 TEST(SanitizerCommon, IntFlags) {
@@ -135,13 +167,13 @@
 
   cf.symbolize = false;
   cf.coverage = true;
-  cf.coverage_direct = true;
+  cf.heap_profile = true;
   cf.log_path = "path/one";
 
-  parser.ParseString("symbolize=1:coverage_direct=false log_path='path/two'");
+  parser.ParseString("symbolize=1:heap_profile=false log_path='path/two'");
   EXPECT_TRUE(cf.symbolize);
   EXPECT_TRUE(cf.coverage);
-  EXPECT_FALSE(cf.coverage_direct);
+  EXPECT_FALSE(cf.heap_profile);
   EXPECT_STREQ("path/two", cf.log_path);
 }
 
diff --git a/lib/sanitizer_common/tests/sanitizer_list_test.cc b/lib/sanitizer_common/tests/sanitizer_list_test.cc
index fbe53c0..ede9771 100644
--- a/lib/sanitizer_common/tests/sanitizer_list_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_list_test.cc
@@ -125,6 +125,22 @@
   CHECK(l.empty());
   l.CheckConsistency();
 
+  l.push_back(x);
+  l.push_back(y);
+  l.push_back(z);
+  l.extract(x, y);
+  CHECK_EQ(l.size(), 2);
+  CHECK_EQ(l.front(), x);
+  CHECK_EQ(l.back(), z);
+  l.CheckConsistency();
+  l.extract(x, z);
+  CHECK_EQ(l.size(), 1);
+  CHECK_EQ(l.front(), x);
+  CHECK_EQ(l.back(), x);
+  l.CheckConsistency();
+  l.pop_front();
+  CHECK(l.empty());
+
   List l1, l2;
   l1.clear();
   l2.clear();
diff --git a/lib/sanitizer_common/tests/sanitizer_quarantine_test.cc b/lib/sanitizer_common/tests/sanitizer_quarantine_test.cc
new file mode 100644
index 0000000..23ed5f9
--- /dev/null
+++ b/lib/sanitizer_common/tests/sanitizer_quarantine_test.cc
@@ -0,0 +1,180 @@
+//===-- sanitizer_quarantine_test.cc --------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of ThreadSanitizer/AddressSanitizer runtime.
+//
+//===----------------------------------------------------------------------===//
+#include "sanitizer_common/sanitizer_common.h"
+#include "sanitizer_common/sanitizer_quarantine.h"
+#include "gtest/gtest.h"
+
+#include <stdlib.h>
+
+namespace __sanitizer {
+
+struct QuarantineCallback {
+  void Recycle(void *m) {}
+  void *Allocate(uptr size) {
+    return malloc(size);
+  }
+  void Deallocate(void *p) {
+    free(p);
+  }
+};
+
+typedef QuarantineCache<QuarantineCallback> Cache;
+
+static void* kFakePtr = reinterpret_cast<void*>(0xFA83FA83);
+static const size_t kBlockSize = 8;
+
+static QuarantineCallback cb;
+
+static void DeallocateCache(Cache *cache) {
+  while (QuarantineBatch *batch = cache->DequeueBatch())
+    cb.Deallocate(batch);
+}
+
+TEST(SanitizerCommon, QuarantineBatchMerge) {
+  // Verify the trivial case.
+  QuarantineBatch into;
+  into.init(kFakePtr, 4UL);
+  QuarantineBatch from;
+  from.init(kFakePtr, 8UL);
+
+  into.merge(&from);
+
+  ASSERT_EQ(into.count, 2UL);
+  ASSERT_EQ(into.batch[0], kFakePtr);
+  ASSERT_EQ(into.batch[1], kFakePtr);
+  ASSERT_EQ(into.size, 12UL + sizeof(QuarantineBatch));
+  ASSERT_EQ(into.quarantined_size(), 12UL);
+
+  ASSERT_EQ(from.count, 0UL);
+  ASSERT_EQ(from.size, sizeof(QuarantineBatch));
+  ASSERT_EQ(from.quarantined_size(), 0UL);
+
+  // Merge the batch to the limit.
+  for (uptr i = 2; i < QuarantineBatch::kSize; ++i)
+    from.push_back(kFakePtr, 8UL);
+  ASSERT_TRUE(into.count + from.count == QuarantineBatch::kSize);
+  ASSERT_TRUE(into.can_merge(&from));
+
+  into.merge(&from);
+  ASSERT_TRUE(into.count == QuarantineBatch::kSize);
+
+  // No more space, not even for one element.
+  from.init(kFakePtr, 8UL);
+
+  ASSERT_FALSE(into.can_merge(&from));
+}
+
+TEST(SanitizerCommon, QuarantineCacheMergeBatchesEmpty) {
+  Cache cache;
+  Cache to_deallocate;
+  cache.MergeBatches(&to_deallocate);
+
+  ASSERT_EQ(to_deallocate.Size(), 0UL);
+  ASSERT_EQ(to_deallocate.DequeueBatch(), nullptr);
+}
+
+TEST(SanitizerCommon, QuarantineCacheMergeBatchesOneBatch) {
+  Cache cache;
+  cache.Enqueue(cb, kFakePtr, kBlockSize);
+  ASSERT_EQ(kBlockSize + sizeof(QuarantineBatch), cache.Size());
+
+  Cache to_deallocate;
+  cache.MergeBatches(&to_deallocate);
+
+  // Nothing to merge, nothing to deallocate.
+  ASSERT_EQ(kBlockSize + sizeof(QuarantineBatch), cache.Size());
+
+  ASSERT_EQ(to_deallocate.Size(), 0UL);
+  ASSERT_EQ(to_deallocate.DequeueBatch(), nullptr);
+
+  DeallocateCache(&cache);
+}
+
+TEST(SanitizerCommon, QuarantineCacheMergeBatchesSmallBatches) {
+  // Make a cache with two batches small enough to merge.
+  Cache from;
+  from.Enqueue(cb, kFakePtr, kBlockSize);
+  Cache cache;
+  cache.Enqueue(cb, kFakePtr, kBlockSize);
+
+  cache.Transfer(&from);
+  ASSERT_EQ(kBlockSize * 2 + sizeof(QuarantineBatch) * 2, cache.Size());
+
+  Cache to_deallocate;
+  cache.MergeBatches(&to_deallocate);
+
+  // Batches merged, one batch to deallocate.
+  ASSERT_EQ(kBlockSize * 2 + sizeof(QuarantineBatch), cache.Size());
+  ASSERT_EQ(to_deallocate.Size(), sizeof(QuarantineBatch));
+
+  DeallocateCache(&cache);
+  DeallocateCache(&to_deallocate);
+}
+
+TEST(SanitizerCommon, QuarantineCacheMergeBatchesTooBigToMerge) {
+  const uptr kNumBlocks = QuarantineBatch::kSize - 1;
+
+  // Make a cache with two batches small enough to merge.
+  Cache from;
+  Cache cache;
+  for (uptr i = 0; i < kNumBlocks; ++i) {
+    from.Enqueue(cb, kFakePtr, kBlockSize);
+    cache.Enqueue(cb, kFakePtr, kBlockSize);
+  }
+  cache.Transfer(&from);
+  ASSERT_EQ(kBlockSize * kNumBlocks * 2 +
+            sizeof(QuarantineBatch) * 2, cache.Size());
+
+  Cache to_deallocate;
+  cache.MergeBatches(&to_deallocate);
+
+  // Batches cannot be merged.
+  ASSERT_EQ(kBlockSize * kNumBlocks * 2 +
+            sizeof(QuarantineBatch) * 2, cache.Size());
+  ASSERT_EQ(to_deallocate.Size(), 0UL);
+
+  DeallocateCache(&cache);
+}
+
+TEST(SanitizerCommon, QuarantineCacheMergeBatchesALotOfBatches) {
+  const uptr kNumBatchesAfterMerge = 3;
+  const uptr kNumBlocks = QuarantineBatch::kSize * kNumBatchesAfterMerge;
+  const uptr kNumBatchesBeforeMerge = kNumBlocks;
+
+  // Make a cache with many small batches.
+  Cache cache;
+  for (uptr i = 0; i < kNumBlocks; ++i) {
+    Cache from;
+    from.Enqueue(cb, kFakePtr, kBlockSize);
+    cache.Transfer(&from);
+  }
+
+  ASSERT_EQ(kBlockSize * kNumBlocks +
+            sizeof(QuarantineBatch) * kNumBatchesBeforeMerge, cache.Size());
+
+  Cache to_deallocate;
+  cache.MergeBatches(&to_deallocate);
+
+  // All blocks should fit into 3 batches.
+  ASSERT_EQ(kBlockSize * kNumBlocks +
+            sizeof(QuarantineBatch) * kNumBatchesAfterMerge, cache.Size());
+
+  ASSERT_EQ(to_deallocate.Size(),
+            sizeof(QuarantineBatch) *
+                (kNumBatchesBeforeMerge - kNumBatchesAfterMerge));
+
+  DeallocateCache(&cache);
+  DeallocateCache(&to_deallocate);
+}
+
+}  // namespace __sanitizer
diff --git a/lib/sanitizer_common/tests/sanitizer_test_utils.h b/lib/sanitizer_common/tests/sanitizer_test_utils.h
index 9c162a6..b7728d9 100644
--- a/lib/sanitizer_common/tests/sanitizer_test_utils.h
+++ b/lib/sanitizer_common/tests/sanitizer_test_utils.h
@@ -124,4 +124,10 @@
 # define SANITIZER_TEST_HAS_PRINTF_L 0
 #endif
 
+#if !defined(_MSC_VER)
+# define SANITIZER_TEST_HAS_STRNDUP 1
+#else
+# define SANITIZER_TEST_HAS_STRNDUP 0
+#endif
+
 #endif  // SANITIZER_TEST_UTILS_H
diff --git a/lib/sanitizer_common/weak_symbols.txt b/lib/sanitizer_common/weak_symbols.txt
index 8a1e32b..5a2b275 100644
--- a/lib/sanitizer_common/weak_symbols.txt
+++ b/lib/sanitizer_common/weak_symbols.txt
@@ -1,5 +1,7 @@
 ___sanitizer_free_hook
 ___sanitizer_malloc_hook
+___sanitizer_report_error_summary
+___sanitizer_sandbox_on_notify
 ___sanitizer_symbolize_code
 ___sanitizer_symbolize_data
 ___sanitizer_symbolize_demangle
diff --git a/lib/scudo/CMakeLists.txt b/lib/scudo/CMakeLists.txt
index 4f1acec..14c199f 100644
--- a/lib/scudo/CMakeLists.txt
+++ b/lib/scudo/CMakeLists.txt
@@ -14,12 +14,21 @@
   scudo_interceptors.cpp
   scudo_new_delete.cpp
   scudo_termination.cpp
+  scudo_tls_android.cpp
+  scudo_tls_linux.cpp
   scudo_utils.cpp)
 
+# Enable the SSE 4.2 instruction set for scudo_crc32.cpp, if available.
 if (COMPILER_RT_HAS_MSSE4_2_FLAG)
   set_source_files_properties(scudo_crc32.cpp PROPERTIES COMPILE_FLAGS -msse4.2)
 endif()
 
+# Enable the AArch64 CRC32 feature for scudo_crc32.cpp, if available.
+# Note that it is enabled by default starting with armv8.1-a.
+if (COMPILER_RT_HAS_MCRC_FLAG)
+  set_source_files_properties(scudo_crc32.cpp PROPERTIES COMPILE_FLAGS -mcrc)
+endif()
+
 if(COMPILER_RT_HAS_SCUDO)
   foreach(arch ${SCUDO_SUPPORTED_ARCH})
     add_compiler_rt_runtime(clang_rt.scudo
diff --git a/lib/scudo/scudo_allocator.cpp b/lib/scudo/scudo_allocator.cpp
index d1121b0..6f30ee9 100644
--- a/lib/scudo/scudo_allocator.cpp
+++ b/lib/scudo/scudo_allocator.cpp
@@ -16,56 +16,18 @@
 
 #include "scudo_allocator.h"
 #include "scudo_crc32.h"
+#include "scudo_tls.h"
 #include "scudo_utils.h"
 
+#include "sanitizer_common/sanitizer_allocator_checks.h"
 #include "sanitizer_common/sanitizer_allocator_interface.h"
+#include "sanitizer_common/sanitizer_errno.h"
 #include "sanitizer_common/sanitizer_quarantine.h"
 
-#include <limits.h>
-#include <pthread.h>
-
-#include <cstring>
+#include <string.h>
 
 namespace __scudo {
 
-#if SANITIZER_CAN_USE_ALLOCATOR64
-const uptr AllocatorSpace = ~0ULL;
-const uptr AllocatorSize = 0x40000000000ULL;
-typedef DefaultSizeClassMap SizeClassMap;
-struct AP {
-  static const uptr kSpaceBeg = AllocatorSpace;
-  static const uptr kSpaceSize = AllocatorSize;
-  static const uptr kMetadataSize = 0;
-  typedef __scudo::SizeClassMap SizeClassMap;
-  typedef NoOpMapUnmapCallback MapUnmapCallback;
-  static const uptr kFlags =
-      SizeClassAllocator64FlagMasks::kRandomShuffleChunks;
-};
-typedef SizeClassAllocator64<AP> PrimaryAllocator;
-#else
-// Currently, the 32-bit Sanitizer allocator has not yet benefited from all the
-// security improvements brought to the 64-bit one. This makes the 32-bit
-// version of Scudo slightly less toughened.
-static const uptr RegionSizeLog = 20;
-static const uptr NumRegions = SANITIZER_MMAP_RANGE_SIZE >> RegionSizeLog;
-# if SANITIZER_WORDSIZE == 32
-typedef FlatByteMap<NumRegions> ByteMap;
-# elif SANITIZER_WORDSIZE == 64
-typedef TwoLevelByteMap<(NumRegions >> 12), 1 << 12> ByteMap;
-# endif  // SANITIZER_WORDSIZE
-typedef DefaultSizeClassMap SizeClassMap;
-typedef SizeClassAllocator32<0, SANITIZER_MMAP_RANGE_SIZE, 0, SizeClassMap,
-    RegionSizeLog, ByteMap> PrimaryAllocator;
-#endif  // SANITIZER_CAN_USE_ALLOCATOR64
-
-typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
-typedef ScudoLargeMmapAllocator SecondaryAllocator;
-typedef CombinedAllocator<PrimaryAllocator, AllocatorCache, SecondaryAllocator>
-  ScudoAllocator;
-
-static ScudoAllocator &getAllocator();
-
-static thread_local Xorshift128Plus Prng;
 // Global static cookie, initialized at start-up.
 static uptr Cookie;
 
@@ -73,17 +35,32 @@
 // at compilation or at runtime.
 static atomic_uint8_t HashAlgorithm = { CRC32Software };
 
-// Helper function that will compute the chunk checksum, being passed all the
-// the needed information as uptrs. It will opt for the hardware version of
-// the checksumming function if available.
-INLINE u32 hashUptrs(uptr Pointer, uptr *Array, uptr ArraySize, u8 HashType) {
-  u32 Crc;
-  Crc = computeCRC32(Cookie, Pointer, HashType);
+INLINE u32 computeCRC32(uptr Crc, uptr Value, uptr *Array, uptr ArraySize) {
+  // If the hardware CRC32 feature is defined here, it was enabled everywhere,
+  // as opposed to only for scudo_crc32.cpp. This means that other hardware
+  // specific instructions were likely emitted at other places, and as a
+  // result there is no reason to not use it here.
+#if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
+  Crc = CRC32_INTRINSIC(Crc, Value);
   for (uptr i = 0; i < ArraySize; i++)
-    Crc = computeCRC32(Crc, Array[i], HashType);
+    Crc = CRC32_INTRINSIC(Crc, Array[i]);
   return Crc;
+#else
+  if (atomic_load_relaxed(&HashAlgorithm) == CRC32Hardware) {
+    Crc = computeHardwareCRC32(Crc, Value);
+    for (uptr i = 0; i < ArraySize; i++)
+      Crc = computeHardwareCRC32(Crc, Array[i]);
+    return Crc;
+  }
+  Crc = computeSoftwareCRC32(Crc, Value);
+  for (uptr i = 0; i < ArraySize; i++)
+    Crc = computeSoftwareCRC32(Crc, Array[i]);
+  return Crc;
+#endif  // defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
 }
 
+static ScudoBackendAllocator &getBackendAllocator();
+
 struct ScudoChunk : UnpackedHeader {
   // We can't use the offset member of the chunk itself, as we would double
   // fetch it without any warranty that it wouldn't have been tampered. To
@@ -96,9 +73,11 @@
   // Returns the usable size for a chunk, meaning the amount of bytes from the
   // beginning of the user data to the end of the backend allocated chunk.
   uptr getUsableSize(UnpackedHeader *Header) {
-    uptr Size = getAllocator().GetActuallyAllocatedSize(getAllocBeg(Header));
+    uptr Size =
+        getBackendAllocator().getActuallyAllocatedSize(getAllocBeg(Header),
+                                                       Header->FromPrimary);
     if (Size == 0)
-      return Size;
+      return 0;
     return Size - AlignedChunkHeaderSize - (Header->Offset << MinAlignmentLog);
   }
 
@@ -108,32 +87,43 @@
     ZeroChecksumHeader.Checksum = 0;
     uptr HeaderHolder[sizeof(UnpackedHeader) / sizeof(uptr)];
     memcpy(&HeaderHolder, &ZeroChecksumHeader, sizeof(HeaderHolder));
-    u32 Hash = hashUptrs(reinterpret_cast<uptr>(this),
-                         HeaderHolder,
-                         ARRAY_SIZE(HeaderHolder),
-                         atomic_load_relaxed(&HashAlgorithm));
-    return static_cast<u16>(Hash);
+    u32 Crc = computeCRC32(Cookie, reinterpret_cast<uptr>(this), HeaderHolder,
+                           ARRAY_SIZE(HeaderHolder));
+    return static_cast<u16>(Crc);
   }
 
-  // Checks the validity of a chunk by verifying its checksum.
+  // Checks the validity of a chunk by verifying its checksum. It doesn't
+  // incur termination in the event of an invalid chunk.
   bool isValid() {
     UnpackedHeader NewUnpackedHeader;
     const AtomicPackedHeader *AtomicHeader =
         reinterpret_cast<const AtomicPackedHeader *>(this);
-    PackedHeader NewPackedHeader =
-        AtomicHeader->load(std::memory_order_relaxed);
+    PackedHeader NewPackedHeader = atomic_load_relaxed(AtomicHeader);
     NewUnpackedHeader = bit_cast<UnpackedHeader>(NewPackedHeader);
     return (NewUnpackedHeader.Checksum == computeChecksum(&NewUnpackedHeader));
   }
 
+  // Nulls out a chunk header. When returning the chunk to the backend, there
+  // is no need to store a valid ChunkAvailable header, as this would be
+  // computationally expensive. Zeroing out serves the same purpose by making
+  // the header invalid. In the extremely rare event where 0 would be a valid
+  // checksum for the chunk, the state of the chunk is ChunkAvailable anyway.
+  COMPILER_CHECK(ChunkAvailable == 0);
+  void eraseHeader() {
+    PackedHeader NullPackedHeader = 0;
+    AtomicPackedHeader *AtomicHeader =
+        reinterpret_cast<AtomicPackedHeader *>(this);
+    atomic_store_relaxed(AtomicHeader, NullPackedHeader);
+  }
+
   // Loads and unpacks the header, verifying the checksum in the process.
   void loadHeader(UnpackedHeader *NewUnpackedHeader) const {
     const AtomicPackedHeader *AtomicHeader =
         reinterpret_cast<const AtomicPackedHeader *>(this);
-    PackedHeader NewPackedHeader =
-        AtomicHeader->load(std::memory_order_relaxed);
+    PackedHeader NewPackedHeader = atomic_load_relaxed(AtomicHeader);
     *NewUnpackedHeader = bit_cast<UnpackedHeader>(NewPackedHeader);
-    if (NewUnpackedHeader->Checksum != computeChecksum(NewUnpackedHeader)) {
+    if (UNLIKELY(NewUnpackedHeader->Checksum !=
+        computeChecksum(NewUnpackedHeader))) {
       dieWithMessage("ERROR: corrupted chunk header at address %p\n", this);
     }
   }
@@ -144,7 +134,7 @@
     PackedHeader NewPackedHeader = bit_cast<PackedHeader>(*NewUnpackedHeader);
     AtomicPackedHeader *AtomicHeader =
         reinterpret_cast<AtomicPackedHeader *>(this);
-    AtomicHeader->store(NewPackedHeader, std::memory_order_relaxed);
+    atomic_store_relaxed(AtomicHeader, NewPackedHeader);
   }
 
   // Packs and stores the header, computing the checksum in the process. We
@@ -157,114 +147,32 @@
     PackedHeader OldPackedHeader = bit_cast<PackedHeader>(*OldUnpackedHeader);
     AtomicPackedHeader *AtomicHeader =
         reinterpret_cast<AtomicPackedHeader *>(this);
-    if (!AtomicHeader->compare_exchange_strong(OldPackedHeader,
-                                               NewPackedHeader,
-                                               std::memory_order_relaxed,
-                                               std::memory_order_relaxed)) {
+    if (UNLIKELY(!atomic_compare_exchange_strong(AtomicHeader,
+                                                 &OldPackedHeader,
+                                                 NewPackedHeader,
+                                                 memory_order_relaxed))) {
       dieWithMessage("ERROR: race on chunk header at address %p\n", this);
     }
   }
 };
 
-static bool ScudoInitIsRunning = false;
-
-static pthread_once_t GlobalInited = PTHREAD_ONCE_INIT;
-static pthread_key_t PThreadKey;
-
-static thread_local bool ThreadInited = false;
-static thread_local bool ThreadTornDown = false;
-static thread_local AllocatorCache Cache;
-
-static void teardownThread(void *p) {
-  uptr v = reinterpret_cast<uptr>(p);
-  // The glibc POSIX thread-local-storage deallocation routine calls user
-  // provided destructors in a loop of PTHREAD_DESTRUCTOR_ITERATIONS.
-  // We want to be called last since other destructors might call free and the
-  // like, so we wait until PTHREAD_DESTRUCTOR_ITERATIONS before draining the
-  // quarantine and swallowing the cache.
-  if (v < PTHREAD_DESTRUCTOR_ITERATIONS) {
-    pthread_setspecific(PThreadKey, reinterpret_cast<void *>(v + 1));
-    return;
-  }
-  drainQuarantine();
-  getAllocator().DestroyCache(&Cache);
-  ThreadTornDown = true;
+ScudoChunk *getScudoChunk(uptr UserBeg) {
+  return reinterpret_cast<ScudoChunk *>(UserBeg - AlignedChunkHeaderSize);
 }
 
-static void initInternal() {
-  SanitizerToolName = "Scudo";
-  CHECK(!ScudoInitIsRunning && "Scudo init calls itself!");
-  ScudoInitIsRunning = true;
+struct AllocatorOptions {
+  u32 QuarantineSizeMb;
+  u32 ThreadLocalQuarantineSizeKb;
+  bool MayReturnNull;
+  s32 ReleaseToOSIntervalMs;
+  bool DeallocationTypeMismatch;
+  bool DeleteSizeMismatch;
+  bool ZeroContents;
 
-  // Check is SSE4.2 is supported, if so, opt for the CRC32 hardware version.
-  if (testCPUFeature(CRC32CPUFeature)) {
-    atomic_store_relaxed(&HashAlgorithm, CRC32Hardware);
-  }
-
-  initFlags();
-
-  AllocatorOptions Options;
-  Options.setFrom(getFlags(), common_flags());
-  initAllocator(Options);
-
-  MaybeStartBackgroudThread();
-
-  ScudoInitIsRunning = false;
-}
-
-static void initGlobal() {
-  pthread_key_create(&PThreadKey, teardownThread);
-  initInternal();
-}
-
-static void NOINLINE initThread() {
-  pthread_once(&GlobalInited, initGlobal);
-  pthread_setspecific(PThreadKey, reinterpret_cast<void *>(1));
-  getAllocator().InitCache(&Cache);
-  ThreadInited = true;
-}
-
-struct QuarantineCallback {
-  explicit QuarantineCallback(AllocatorCache *Cache)
-    : Cache_(Cache) {}
-
-  // Chunk recycling function, returns a quarantined chunk to the backend.
-  void Recycle(ScudoChunk *Chunk) {
-    UnpackedHeader Header;
-    Chunk->loadHeader(&Header);
-    if (Header.State != ChunkQuarantine) {
-      dieWithMessage("ERROR: invalid chunk state when recycling address %p\n",
-                     Chunk);
-    }
-    void *Ptr = Chunk->getAllocBeg(&Header);
-    getAllocator().Deallocate(Cache_, Ptr);
-  }
-
-  /// Internal quarantine allocation and deallocation functions.
-  void *Allocate(uptr Size) {
-    // The internal quarantine memory cannot be protected by us. But the only
-    // structures allocated are QuarantineBatch, that are 8KB for x64. So we
-    // will use mmap for those, and given that Deallocate doesn't pass a size
-    // in, we enforce the size of the allocation to be sizeof(QuarantineBatch).
-    // TODO(kostyak): switching to mmap impacts greatly performances, we have
-    //                to find another solution
-    // CHECK_EQ(Size, sizeof(QuarantineBatch));
-    // return MmapOrDie(Size, "QuarantineBatch");
-    return getAllocator().Allocate(Cache_, Size, 1, false);
-  }
-
-  void Deallocate(void *Ptr) {
-    // UnmapOrDie(Ptr, sizeof(QuarantineBatch));
-    getAllocator().Deallocate(Cache_, Ptr);
-  }
-
-  AllocatorCache *Cache_;
+  void setFrom(const Flags *f, const CommonFlags *cf);
+  void copyTo(Flags *f, CommonFlags *cf) const;
 };
 
-typedef Quarantine<QuarantineCallback, ScudoChunk> ScudoQuarantine;
-typedef ScudoQuarantine::Cache QuarantineCache;
-static thread_local QuarantineCache ThreadQuarantineCache;
-
 void AllocatorOptions::setFrom(const Flags *f, const CommonFlags *cf) {
   MayReturnNull = cf->allocator_may_return_null;
   ReleaseToOSIntervalMs = cf->allocator_release_to_os_interval_ms;
@@ -285,25 +193,110 @@
   f->ZeroContents = ZeroContents;
 }
 
-struct Allocator {
+static void initScudoInternal(const AllocatorOptions &Options);
+
+static bool ScudoInitIsRunning = false;
+
+void initScudo() {
+  SanitizerToolName = "Scudo";
+  CHECK(!ScudoInitIsRunning && "Scudo init calls itself!");
+  ScudoInitIsRunning = true;
+
+  // Check if hardware CRC32 is supported in the binary and by the platform, if
+  // so, opt for the CRC32 hardware version of the checksum.
+  if (computeHardwareCRC32 && testCPUFeature(CRC32CPUFeature))
+    atomic_store_relaxed(&HashAlgorithm, CRC32Hardware);
+
+  initFlags();
+
+  AllocatorOptions Options;
+  Options.setFrom(getFlags(), common_flags());
+  initScudoInternal(Options);
+
+  // TODO(kostyak): determine if MaybeStartBackgroudThread could be of some use.
+
+  ScudoInitIsRunning = false;
+}
+
+struct QuarantineCallback {
+  explicit QuarantineCallback(AllocatorCache *Cache)
+    : Cache_(Cache) {}
+
+  // Chunk recycling function, returns a quarantined chunk to the backend,
+  // first making sure it hasn't been tampered with.
+  void Recycle(ScudoChunk *Chunk) {
+    UnpackedHeader Header;
+    Chunk->loadHeader(&Header);
+    if (UNLIKELY(Header.State != ChunkQuarantine)) {
+      dieWithMessage("ERROR: invalid chunk state when recycling address %p\n",
+                     Chunk);
+    }
+    Chunk->eraseHeader();
+    void *Ptr = Chunk->getAllocBeg(&Header);
+    if (Header.FromPrimary)
+      getBackendAllocator().deallocatePrimary(Cache_, Ptr);
+    else
+      getBackendAllocator().deallocateSecondary(Ptr);
+  }
+
+  // Internal quarantine allocation and deallocation functions. We first check
+  // that the batches are indeed serviced by the Primary.
+  // TODO(kostyak): figure out the best way to protect the batches.
+  COMPILER_CHECK(sizeof(QuarantineBatch) < SizeClassMap::kMaxSize);
+  void *Allocate(uptr Size) {
+    return getBackendAllocator().allocatePrimary(Cache_, Size);
+  }
+
+  void Deallocate(void *Ptr) {
+    getBackendAllocator().deallocatePrimary(Cache_, Ptr);
+  }
+
+  AllocatorCache *Cache_;
+};
+
+typedef Quarantine<QuarantineCallback, ScudoChunk> ScudoQuarantine;
+typedef ScudoQuarantine::Cache ScudoQuarantineCache;
+COMPILER_CHECK(sizeof(ScudoQuarantineCache) <=
+               sizeof(ScudoThreadContext::QuarantineCachePlaceHolder));
+
+AllocatorCache *getAllocatorCache(ScudoThreadContext *ThreadContext) {
+  return &ThreadContext->Cache;
+}
+
+ScudoQuarantineCache *getQuarantineCache(ScudoThreadContext *ThreadContext) {
+  return reinterpret_cast<
+      ScudoQuarantineCache *>(ThreadContext->QuarantineCachePlaceHolder);
+}
+
+ScudoPrng *getPrng(ScudoThreadContext *ThreadContext) {
+  return &ThreadContext->Prng;
+}
+
+struct ScudoAllocator {
   static const uptr MaxAllowedMallocSize =
       FIRST_32_SECOND_64(2UL << 30, 1ULL << 40);
 
-  ScudoAllocator BackendAllocator;
+  typedef ReturnNullOrDieOnFailure FailureHandler;
+
+  ScudoBackendAllocator BackendAllocator;
   ScudoQuarantine AllocatorQuarantine;
 
+  StaticSpinMutex GlobalPrngMutex;
+  ScudoPrng GlobalPrng;
+
   // The fallback caches are used when the thread local caches have been
   // 'detroyed' on thread tear-down. They are protected by a Mutex as they can
   // be accessed by different threads.
   StaticSpinMutex FallbackMutex;
   AllocatorCache FallbackAllocatorCache;
-  QuarantineCache FallbackQuarantineCache;
+  ScudoQuarantineCache FallbackQuarantineCache;
+  ScudoPrng FallbackPrng;
 
   bool DeallocationTypeMismatch;
   bool ZeroContents;
   bool DeleteSizeMismatch;
 
-  explicit Allocator(LinkerInitialized)
+  explicit ScudoAllocator(LinkerInitialized)
     : AllocatorQuarantine(LINKER_INITIALIZED),
       FallbackQuarantineCache(LINKER_INITIALIZED) {}
 
@@ -317,23 +310,23 @@
     // result, the maximum offset will be at most the maximum alignment for the
     // last size class minus the header size, in multiples of MinAlignment.
     UnpackedHeader Header = {};
-    uptr MaxPrimaryAlignment = 1 << MostSignificantSetBitIndex(
-        SizeClassMap::kMaxSize - MinAlignment);
-    uptr MaxOffset = (MaxPrimaryAlignment - AlignedChunkHeaderSize) >>
-        MinAlignmentLog;
+    uptr MaxPrimaryAlignment =
+        1 << MostSignificantSetBitIndex(SizeClassMap::kMaxSize - MinAlignment);
+    uptr MaxOffset =
+        (MaxPrimaryAlignment - AlignedChunkHeaderSize) >> MinAlignmentLog;
     Header.Offset = MaxOffset;
     if (Header.Offset != MaxOffset) {
       dieWithMessage("ERROR: the maximum possible offset doesn't fit in the "
                      "header\n");
     }
-    // Verify that we can fit the maximum amount of unused bytes in the header.
-    // Given that the Secondary fits the allocation to a page, the worst case
-    // scenario happens in the Primary. It will depend on the second to last
-    // and last class sizes, as well as the dynamic base for the Primary. The
-    // following is an over-approximation that works for our needs.
-    uptr MaxUnusedBytes = SizeClassMap::kMaxSize - 1 - AlignedChunkHeaderSize;
-    Header.UnusedBytes = MaxUnusedBytes;
-    if (Header.UnusedBytes != MaxUnusedBytes) {
+    // Verify that we can fit the maximum size or amount of unused bytes in the
+    // header. Given that the Secondary fits the allocation to a page, the worst
+    // case scenario happens in the Primary. It will depend on the second to
+    // last and last class sizes, as well as the dynamic base for the Primary.
+    // The following is an over-approximation that works for our needs.
+    uptr MaxSizeOrUnusedBytes = SizeClassMap::kMaxSize - 1;
+    Header.SizeOrUnusedBytes = MaxSizeOrUnusedBytes;
+    if (Header.SizeOrUnusedBytes != MaxSizeOrUnusedBytes) {
       dieWithMessage("ERROR: the maximum possible unused bytes doesn't fit in "
                      "the header\n");
     }
@@ -341,196 +334,154 @@
     DeallocationTypeMismatch = Options.DeallocationTypeMismatch;
     DeleteSizeMismatch = Options.DeleteSizeMismatch;
     ZeroContents = Options.ZeroContents;
-    BackendAllocator.Init(Options.MayReturnNull, Options.ReleaseToOSIntervalMs);
+    SetAllocatorMayReturnNull(Options.MayReturnNull);
+    BackendAllocator.init(Options.ReleaseToOSIntervalMs);
     AllocatorQuarantine.Init(
         static_cast<uptr>(Options.QuarantineSizeMb) << 20,
         static_cast<uptr>(Options.ThreadLocalQuarantineSizeKb) << 10);
-    BackendAllocator.InitCache(&FallbackAllocatorCache);
-    Cookie = Prng.Next();
+    GlobalPrng.init();
+    Cookie = GlobalPrng.getU64();
+    BackendAllocator.initCache(&FallbackAllocatorCache);
+    FallbackPrng.init();
   }
 
-  // Helper function that checks for a valid Scudo chunk.
+  // Helper function that checks for a valid Scudo chunk. nullptr isn't.
   bool isValidPointer(const void *UserPtr) {
-    uptr ChunkBeg = reinterpret_cast<uptr>(UserPtr);
-    if (!IsAligned(ChunkBeg, MinAlignment)) {
+    initThreadMaybe();
+    if (UNLIKELY(!UserPtr))
       return false;
-    }
-    ScudoChunk *Chunk =
-        reinterpret_cast<ScudoChunk *>(ChunkBeg - AlignedChunkHeaderSize);
-    return Chunk->isValid();
+    uptr UserBeg = reinterpret_cast<uptr>(UserPtr);
+    if (!IsAligned(UserBeg, MinAlignment))
+      return false;
+    return getScudoChunk(UserBeg)->isValid();
   }
 
   // Allocates a chunk.
-  void *allocate(uptr Size, uptr Alignment, AllocType Type) {
-    if (UNLIKELY(!ThreadInited))
-      initThread();
-    if (!IsPowerOfTwo(Alignment)) {
-      dieWithMessage("ERROR: alignment is not a power of 2\n");
-    }
-    if (Alignment > MaxAlignment)
-      return BackendAllocator.ReturnNullOrDieOnBadRequest();
-    if (Alignment < MinAlignment)
+  void *allocate(uptr Size, uptr Alignment, AllocType Type,
+                 bool ForceZeroContents = false) {
+    initThreadMaybe();
+    if (UNLIKELY(Alignment > MaxAlignment))
+      return FailureHandler::OnBadRequest();
+    if (UNLIKELY(Alignment < MinAlignment))
       Alignment = MinAlignment;
-    if (Size == 0)
+    if (UNLIKELY(Size >= MaxAllowedMallocSize))
+      return FailureHandler::OnBadRequest();
+    if (UNLIKELY(Size == 0))
       Size = 1;
-    if (Size >= MaxAllowedMallocSize)
-      return BackendAllocator.ReturnNullOrDieOnBadRequest();
 
     uptr NeededSize = RoundUpTo(Size, MinAlignment) + AlignedChunkHeaderSize;
-    if (Alignment > MinAlignment)
-      NeededSize += Alignment;
-    if (NeededSize >= MaxAllowedMallocSize)
-      return BackendAllocator.ReturnNullOrDieOnBadRequest();
+    uptr AlignedSize = (Alignment > MinAlignment) ?
+        NeededSize + (Alignment - AlignedChunkHeaderSize) : NeededSize;
+    if (UNLIKELY(AlignedSize >= MaxAllowedMallocSize))
+      return FailureHandler::OnBadRequest();
 
-    // Primary backed and Secondary backed allocations have a different
-    // treatment. We deal with alignment requirements of Primary serviced
-    // allocations here, but the Secondary will take care of its own alignment
-    // needs, which means we also have to work around some limitations of the
-    // combined allocator to accommodate the situation.
-    bool FromPrimary = PrimaryAllocator::CanAllocate(NeededSize, MinAlignment);
+    // Primary and Secondary backed allocations have a different treatment. We
+    // deal with alignment requirements of Primary serviced allocations here,
+    // but the Secondary will take care of its own alignment needs.
+    bool FromPrimary = PrimaryAllocator::CanAllocate(AlignedSize, MinAlignment);
 
     void *Ptr;
-    if (LIKELY(!ThreadTornDown)) {
-      Ptr = BackendAllocator.Allocate(&Cache, NeededSize,
-                                      FromPrimary ? MinAlignment : Alignment);
+    u8 Salt;
+    uptr AllocSize;
+    if (FromPrimary) {
+      AllocSize = AlignedSize;
+      ScudoThreadContext *ThreadContext = getThreadContextAndLock();
+      if (LIKELY(ThreadContext)) {
+        Salt = getPrng(ThreadContext)->getU8();
+        Ptr = BackendAllocator.allocatePrimary(getAllocatorCache(ThreadContext),
+                                               AllocSize);
+        ThreadContext->unlock();
+      } else {
+        SpinMutexLock l(&FallbackMutex);
+        Salt = FallbackPrng.getU8();
+        Ptr = BackendAllocator.allocatePrimary(&FallbackAllocatorCache,
+                                               AllocSize);
+      }
     } else {
-      SpinMutexLock l(&FallbackMutex);
-      Ptr = BackendAllocator.Allocate(&FallbackAllocatorCache, NeededSize,
-                                      FromPrimary ? MinAlignment : Alignment);
+      {
+        SpinMutexLock l(&GlobalPrngMutex);
+        Salt = GlobalPrng.getU8();
+      }
+      AllocSize = NeededSize;
+      Ptr = BackendAllocator.allocateSecondary(AllocSize, Alignment);
     }
-    if (!Ptr)
-      return BackendAllocator.ReturnNullOrDieOnOOM();
+    if (UNLIKELY(!Ptr))
+      return FailureHandler::OnOOM();
 
-    uptr AllocBeg = reinterpret_cast<uptr>(Ptr);
-    // If the allocation was serviced by the secondary, the returned pointer
-    // accounts for ChunkHeaderSize to pass the alignment check of the combined
-    // allocator. Adjust it here.
-    if (!FromPrimary) {
-      AllocBeg -= AlignedChunkHeaderSize;
-      if (Alignment > MinAlignment)
-        NeededSize -= Alignment;
-    }
-
-    uptr ActuallyAllocatedSize = BackendAllocator.GetActuallyAllocatedSize(
-        reinterpret_cast<void *>(AllocBeg));
     // If requested, we will zero out the entire contents of the returned chunk.
-    if (ZeroContents && FromPrimary)
-       memset(Ptr, 0, ActuallyAllocatedSize);
+    if ((ForceZeroContents || ZeroContents) && FromPrimary)
+      memset(Ptr, 0, BackendAllocator.getActuallyAllocatedSize(
+          Ptr, /*FromPrimary=*/true));
 
-    uptr ChunkBeg = AllocBeg + AlignedChunkHeaderSize;
-    if (!IsAligned(ChunkBeg, Alignment))
-      ChunkBeg = RoundUpTo(ChunkBeg, Alignment);
-    CHECK_LE(ChunkBeg + Size, AllocBeg + NeededSize);
-    ScudoChunk *Chunk =
-        reinterpret_cast<ScudoChunk *>(ChunkBeg - AlignedChunkHeaderSize);
     UnpackedHeader Header = {};
+    uptr AllocBeg = reinterpret_cast<uptr>(Ptr);
+    uptr UserBeg = AllocBeg + AlignedChunkHeaderSize;
+    if (UNLIKELY(!IsAligned(UserBeg, Alignment))) {
+      // Since the Secondary takes care of alignment, a non-aligned pointer
+      // means it is from the Primary. It is also the only case where the offset
+      // field of the header would be non-zero.
+      CHECK(FromPrimary);
+      UserBeg = RoundUpTo(UserBeg, Alignment);
+      uptr Offset = UserBeg - AlignedChunkHeaderSize - AllocBeg;
+      Header.Offset = Offset >> MinAlignmentLog;
+    }
+    CHECK_LE(UserBeg + Size, AllocBeg + AllocSize);
     Header.State = ChunkAllocated;
-    uptr Offset = ChunkBeg - AlignedChunkHeaderSize - AllocBeg;
-    Header.Offset = Offset >> MinAlignmentLog;
     Header.AllocType = Type;
-    Header.UnusedBytes = ActuallyAllocatedSize - Offset -
-        AlignedChunkHeaderSize - Size;
-    Header.Salt = static_cast<u8>(Prng.Next());
-    Chunk->storeHeader(&Header);
-    void *UserPtr = reinterpret_cast<void *>(ChunkBeg);
-    // TODO(kostyak): hooks sound like a terrible idea security wise but might
-    //                be needed for things to work properly?
+    if (FromPrimary) {
+      Header.FromPrimary = 1;
+      Header.SizeOrUnusedBytes = Size;
+    } else {
+      // The secondary fits the allocations to a page, so the amount of unused
+      // bytes is the difference between the end of the user allocation and the
+      // next page boundary.
+      uptr PageSize = GetPageSizeCached();
+      uptr TrailingBytes = (UserBeg + Size) & (PageSize - 1);
+      if (TrailingBytes)
+        Header.SizeOrUnusedBytes = PageSize - TrailingBytes;
+    }
+    Header.Salt = Salt;
+    getScudoChunk(UserBeg)->storeHeader(&Header);
+    void *UserPtr = reinterpret_cast<void *>(UserBeg);
     // if (&__sanitizer_malloc_hook) __sanitizer_malloc_hook(UserPtr, Size);
     return UserPtr;
   }
 
-  // Deallocates a Chunk, which means adding it to the delayed free list (or
-  // Quarantine).
-  void deallocate(void *UserPtr, uptr DeleteSize, AllocType Type) {
-    if (UNLIKELY(!ThreadInited))
-      initThread();
-    // TODO(kostyak): see hook comment above
-    // if (&__sanitizer_free_hook) __sanitizer_free_hook(UserPtr);
-    if (!UserPtr)
-      return;
-    uptr ChunkBeg = reinterpret_cast<uptr>(UserPtr);
-    if (!IsAligned(ChunkBeg, MinAlignment)) {
-      dieWithMessage("ERROR: attempted to deallocate a chunk not properly "
-                     "aligned at address %p\n", UserPtr);
-    }
-    ScudoChunk *Chunk =
-        reinterpret_cast<ScudoChunk *>(ChunkBeg - AlignedChunkHeaderSize);
-    UnpackedHeader OldHeader;
-    Chunk->loadHeader(&OldHeader);
-    if (OldHeader.State != ChunkAllocated) {
-      dieWithMessage("ERROR: invalid chunk state when deallocating address "
-                     "%p\n", UserPtr);
-    }
-    uptr UsableSize = Chunk->getUsableSize(&OldHeader);
-    UnpackedHeader NewHeader = OldHeader;
-    NewHeader.State = ChunkQuarantine;
-    Chunk->compareExchangeHeader(&NewHeader, &OldHeader);
-    if (DeallocationTypeMismatch) {
-      // The deallocation type has to match the allocation one.
-      if (NewHeader.AllocType != Type) {
-        // With the exception of memalign'd Chunks, that can be still be free'd.
-        if (NewHeader.AllocType != FromMemalign || Type != FromMalloc) {
-          dieWithMessage("ERROR: allocation type mismatch on address %p\n",
-                         Chunk);
+  // Place a chunk in the quarantine. In the event of a zero-sized quarantine,
+  // we directly deallocate the chunk, otherwise the flow would lead to the
+  // chunk being loaded (and checked) twice, and stored (and checksummed) once,
+  // with no additional security value.
+  void quarantineOrDeallocateChunk(ScudoChunk *Chunk, UnpackedHeader *Header,
+                                   uptr Size) {
+    bool FromPrimary = Header->FromPrimary;
+    bool BypassQuarantine = (AllocatorQuarantine.GetCacheSize() == 0);
+    if (BypassQuarantine) {
+      Chunk->eraseHeader();
+      void *Ptr = Chunk->getAllocBeg(Header);
+      if (FromPrimary) {
+        ScudoThreadContext *ThreadContext = getThreadContextAndLock();
+        if (LIKELY(ThreadContext)) {
+          getBackendAllocator().deallocatePrimary(
+              getAllocatorCache(ThreadContext), Ptr);
+          ThreadContext->unlock();
+        } else {
+          SpinMutexLock Lock(&FallbackMutex);
+          getBackendAllocator().deallocatePrimary(&FallbackAllocatorCache, Ptr);
         }
+      } else {
+        getBackendAllocator().deallocateSecondary(Ptr);
       }
-    }
-    uptr Size = UsableSize - OldHeader.UnusedBytes;
-    if (DeleteSizeMismatch) {
-      if (DeleteSize && DeleteSize != Size) {
-        dieWithMessage("ERROR: invalid sized delete on chunk at address %p\n",
-                       Chunk);
-      }
-    }
-
-    if (LIKELY(!ThreadTornDown)) {
-      AllocatorQuarantine.Put(&ThreadQuarantineCache,
-                              QuarantineCallback(&Cache), Chunk, UsableSize);
     } else {
-      SpinMutexLock l(&FallbackMutex);
-      AllocatorQuarantine.Put(&FallbackQuarantineCache,
-                              QuarantineCallback(&FallbackAllocatorCache),
-                              Chunk, UsableSize);
-    }
-  }
-
-  // Reallocates a chunk. We can save on a new allocation if the new requested
-  // size still fits in the chunk.
-  void *reallocate(void *OldPtr, uptr NewSize) {
-    if (UNLIKELY(!ThreadInited))
-      initThread();
-    uptr ChunkBeg = reinterpret_cast<uptr>(OldPtr);
-    ScudoChunk *Chunk =
-        reinterpret_cast<ScudoChunk *>(ChunkBeg - AlignedChunkHeaderSize);
-    UnpackedHeader OldHeader;
-    Chunk->loadHeader(&OldHeader);
-    if (OldHeader.State != ChunkAllocated) {
-      dieWithMessage("ERROR: invalid chunk state when reallocating address "
-                     "%p\n", OldPtr);
-    }
-    uptr Size = Chunk->getUsableSize(&OldHeader);
-    if (OldHeader.AllocType != FromMalloc) {
-      dieWithMessage("ERROR: invalid chunk type when reallocating address %p\n",
-                     Chunk);
-    }
-    UnpackedHeader NewHeader = OldHeader;
-    // The new size still fits in the current chunk.
-    if (NewSize <= Size) {
-      NewHeader.UnusedBytes = Size - NewSize;
-      Chunk->compareExchangeHeader(&NewHeader, &OldHeader);
-      return OldPtr;
-    }
-    // Otherwise, we have to allocate a new chunk and copy the contents of the
-    // old one.
-    void *NewPtr = allocate(NewSize, MinAlignment, FromMalloc);
-    if (NewPtr) {
-      uptr OldSize = Size - OldHeader.UnusedBytes;
-      memcpy(NewPtr, OldPtr, Min(NewSize, OldSize));
+      UnpackedHeader NewHeader = *Header;
       NewHeader.State = ChunkQuarantine;
-      Chunk->compareExchangeHeader(&NewHeader, &OldHeader);
-      if (LIKELY(!ThreadTornDown)) {
-        AllocatorQuarantine.Put(&ThreadQuarantineCache,
-                                QuarantineCallback(&Cache), Chunk, Size);
+      Chunk->compareExchangeHeader(&NewHeader, Header);
+      ScudoThreadContext *ThreadContext = getThreadContextAndLock();
+      if (LIKELY(ThreadContext)) {
+        AllocatorQuarantine.Put(getQuarantineCache(ThreadContext),
+                                QuarantineCallback(
+                                    getAllocatorCache(ThreadContext)),
+                                Chunk, Size);
+        ThreadContext->unlock();
       } else {
         SpinMutexLock l(&FallbackMutex);
         AllocatorQuarantine.Put(&FallbackQuarantineCache,
@@ -538,22 +489,108 @@
                                 Chunk, Size);
       }
     }
+  }
+
+  // Deallocates a Chunk, which means adding it to the delayed free list (or
+  // Quarantine).
+  void deallocate(void *UserPtr, uptr DeleteSize, AllocType Type) {
+    initThreadMaybe();
+    // if (&__sanitizer_free_hook) __sanitizer_free_hook(UserPtr);
+    if (UNLIKELY(!UserPtr))
+      return;
+    uptr UserBeg = reinterpret_cast<uptr>(UserPtr);
+    if (UNLIKELY(!IsAligned(UserBeg, MinAlignment))) {
+      dieWithMessage("ERROR: attempted to deallocate a chunk not properly "
+                     "aligned at address %p\n", UserPtr);
+    }
+    ScudoChunk *Chunk = getScudoChunk(UserBeg);
+    UnpackedHeader OldHeader;
+    Chunk->loadHeader(&OldHeader);
+    if (UNLIKELY(OldHeader.State != ChunkAllocated)) {
+      dieWithMessage("ERROR: invalid chunk state when deallocating address "
+                     "%p\n", UserPtr);
+    }
+    if (DeallocationTypeMismatch) {
+      // The deallocation type has to match the allocation one.
+      if (OldHeader.AllocType != Type) {
+        // With the exception of memalign'd Chunks, that can be still be free'd.
+        if (OldHeader.AllocType != FromMemalign || Type != FromMalloc) {
+          dieWithMessage("ERROR: allocation type mismatch on address %p\n",
+                         UserPtr);
+        }
+      }
+    }
+    uptr Size = OldHeader.FromPrimary ? OldHeader.SizeOrUnusedBytes :
+        Chunk->getUsableSize(&OldHeader) - OldHeader.SizeOrUnusedBytes;
+    if (DeleteSizeMismatch) {
+      if (DeleteSize && DeleteSize != Size) {
+        dieWithMessage("ERROR: invalid sized delete on chunk at address %p\n",
+                       UserPtr);
+      }
+    }
+
+    // If a small memory amount was allocated with a larger alignment, we want
+    // to take that into account. Otherwise the Quarantine would be filled with
+    // tiny chunks, taking a lot of VA memory. This is an approximation of the
+    // usable size, that allows us to not call GetActuallyAllocatedSize.
+    uptr LiableSize = Size + (OldHeader.Offset << MinAlignment);
+    quarantineOrDeallocateChunk(Chunk, &OldHeader, LiableSize);
+  }
+
+  // Reallocates a chunk. We can save on a new allocation if the new requested
+  // size still fits in the chunk.
+  void *reallocate(void *OldPtr, uptr NewSize) {
+    initThreadMaybe();
+    uptr UserBeg = reinterpret_cast<uptr>(OldPtr);
+    if (UNLIKELY(!IsAligned(UserBeg, MinAlignment))) {
+      dieWithMessage("ERROR: attempted to reallocate a chunk not properly "
+                     "aligned at address %p\n", OldPtr);
+    }
+    ScudoChunk *Chunk = getScudoChunk(UserBeg);
+    UnpackedHeader OldHeader;
+    Chunk->loadHeader(&OldHeader);
+    if (UNLIKELY(OldHeader.State != ChunkAllocated)) {
+      dieWithMessage("ERROR: invalid chunk state when reallocating address "
+                     "%p\n", OldPtr);
+    }
+    if (UNLIKELY(OldHeader.AllocType != FromMalloc)) {
+      dieWithMessage("ERROR: invalid chunk type when reallocating address %p\n",
+                     OldPtr);
+    }
+    uptr UsableSize = Chunk->getUsableSize(&OldHeader);
+    // The new size still fits in the current chunk, and the size difference
+    // is reasonable.
+    if (NewSize <= UsableSize &&
+        (UsableSize - NewSize) < (SizeClassMap::kMaxSize / 2)) {
+      UnpackedHeader NewHeader = OldHeader;
+      NewHeader.SizeOrUnusedBytes =
+                OldHeader.FromPrimary ? NewSize : UsableSize - NewSize;
+      Chunk->compareExchangeHeader(&NewHeader, &OldHeader);
+      return OldPtr;
+    }
+    // Otherwise, we have to allocate a new chunk and copy the contents of the
+    // old one.
+    void *NewPtr = allocate(NewSize, MinAlignment, FromMalloc);
+    if (NewPtr) {
+      uptr OldSize = OldHeader.FromPrimary ? OldHeader.SizeOrUnusedBytes :
+          UsableSize - OldHeader.SizeOrUnusedBytes;
+      memcpy(NewPtr, OldPtr, Min(NewSize, OldSize));
+      quarantineOrDeallocateChunk(Chunk, &OldHeader, UsableSize);
+    }
     return NewPtr;
   }
 
   // Helper function that returns the actual usable size of a chunk.
   uptr getUsableSize(const void *Ptr) {
-    if (UNLIKELY(!ThreadInited))
-      initThread();
-    if (!Ptr)
+    initThreadMaybe();
+    if (UNLIKELY(!Ptr))
       return 0;
-    uptr ChunkBeg = reinterpret_cast<uptr>(Ptr);
-    ScudoChunk *Chunk =
-        reinterpret_cast<ScudoChunk *>(ChunkBeg - AlignedChunkHeaderSize);
+    uptr UserBeg = reinterpret_cast<uptr>(Ptr);
+    ScudoChunk *Chunk = getScudoChunk(UserBeg);
     UnpackedHeader Header;
     Chunk->loadHeader(&Header);
     // Getting the usable size of a chunk only makes sense if it's allocated.
-    if (Header.State != ChunkAllocated) {
+    if (UNLIKELY(Header.State != ChunkAllocated)) {
       dieWithMessage("ERROR: invalid chunk state when sizing address %p\n",
                      Ptr);
     }
@@ -561,40 +598,49 @@
   }
 
   void *calloc(uptr NMemB, uptr Size) {
-    if (UNLIKELY(!ThreadInited))
-      initThread();
-    uptr Total = NMemB * Size;
-    if (Size != 0 && Total / Size != NMemB) // Overflow check
-      return BackendAllocator.ReturnNullOrDieOnBadRequest();
-    void *Ptr = allocate(Total, MinAlignment, FromMalloc);
-    // If ZeroContents, the content of the chunk has already been zero'd out.
-    if (!ZeroContents && Ptr && BackendAllocator.FromPrimary(Ptr))
-      memset(Ptr, 0, getUsableSize(Ptr));
-    return Ptr;
+    initThreadMaybe();
+    if (UNLIKELY(CheckForCallocOverflow(NMemB, Size)))
+      return FailureHandler::OnBadRequest();
+    return allocate(NMemB * Size, MinAlignment, FromMalloc, true);
   }
 
-  void drainQuarantine() {
-    AllocatorQuarantine.Drain(&ThreadQuarantineCache,
-                              QuarantineCallback(&Cache));
+  void commitBack(ScudoThreadContext *ThreadContext) {
+    AllocatorCache *Cache = getAllocatorCache(ThreadContext);
+    AllocatorQuarantine.Drain(getQuarantineCache(ThreadContext),
+                              QuarantineCallback(Cache));
+    BackendAllocator.destroyCache(Cache);
+  }
+
+  uptr getStats(AllocatorStat StatType) {
+    initThreadMaybe();
+    uptr stats[AllocatorStatCount];
+    BackendAllocator.getStats(stats);
+    return stats[StatType];
   }
 };
 
-static Allocator Instance(LINKER_INITIALIZED);
+static ScudoAllocator Instance(LINKER_INITIALIZED);
 
-static ScudoAllocator &getAllocator() {
+static ScudoBackendAllocator &getBackendAllocator() {
   return Instance.BackendAllocator;
 }
 
-void initAllocator(const AllocatorOptions &Options) {
+static void initScudoInternal(const AllocatorOptions &Options) {
   Instance.init(Options);
 }
 
-void drainQuarantine() {
-  Instance.drainQuarantine();
+void ScudoThreadContext::init() {
+  getBackendAllocator().initCache(&Cache);
+  Prng.init();
+  memset(QuarantineCachePlaceHolder, 0, sizeof(QuarantineCachePlaceHolder));
+}
+
+void ScudoThreadContext::commitBack() {
+  Instance.commitBack(this);
 }
 
 void *scudoMalloc(uptr Size, AllocType Type) {
-  return Instance.allocate(Size, MinAlignment, Type);
+  return SetErrnoOnNull(Instance.allocate(Size, MinAlignment, Type));
 }
 
 void scudoFree(void *Ptr, AllocType Type) {
@@ -607,47 +653,56 @@
 
 void *scudoRealloc(void *Ptr, uptr Size) {
   if (!Ptr)
-    return Instance.allocate(Size, MinAlignment, FromMalloc);
+    return SetErrnoOnNull(Instance.allocate(Size, MinAlignment, FromMalloc));
   if (Size == 0) {
     Instance.deallocate(Ptr, 0, FromMalloc);
     return nullptr;
   }
-  return Instance.reallocate(Ptr, Size);
+  return SetErrnoOnNull(Instance.reallocate(Ptr, Size));
 }
 
 void *scudoCalloc(uptr NMemB, uptr Size) {
-  return Instance.calloc(NMemB, Size);
+  return SetErrnoOnNull(Instance.calloc(NMemB, Size));
 }
 
 void *scudoValloc(uptr Size) {
-  return Instance.allocate(Size, GetPageSizeCached(), FromMemalign);
-}
-
-void *scudoMemalign(uptr Alignment, uptr Size) {
-  return Instance.allocate(Size, Alignment, FromMemalign);
+  return SetErrnoOnNull(
+      Instance.allocate(Size, GetPageSizeCached(), FromMemalign));
 }
 
 void *scudoPvalloc(uptr Size) {
   uptr PageSize = GetPageSizeCached();
-  Size = RoundUpTo(Size, PageSize);
-  if (Size == 0) {
-    // pvalloc(0) should allocate one page.
-    Size = PageSize;
+  // pvalloc(0) should allocate one page.
+  Size = Size ? RoundUpTo(Size, PageSize) : PageSize;
+  return SetErrnoOnNull(Instance.allocate(Size, PageSize, FromMemalign));
+}
+
+void *scudoMemalign(uptr Alignment, uptr Size) {
+  if (UNLIKELY(!IsPowerOfTwo(Alignment))) {
+    errno = errno_EINVAL;
+    return ScudoAllocator::FailureHandler::OnBadRequest();
   }
-  return Instance.allocate(Size, PageSize, FromMemalign);
+  return SetErrnoOnNull(Instance.allocate(Size, Alignment, FromMemalign));
 }
 
 int scudoPosixMemalign(void **MemPtr, uptr Alignment, uptr Size) {
-  *MemPtr = Instance.allocate(Size, Alignment, FromMemalign);
+  if (UNLIKELY(!CheckPosixMemalignAlignment(Alignment))) {
+    ScudoAllocator::FailureHandler::OnBadRequest();
+    return errno_EINVAL;
+  }
+  void *Ptr = Instance.allocate(Size, Alignment, FromMemalign);
+  if (UNLIKELY(!Ptr))
+    return errno_ENOMEM;
+  *MemPtr = Ptr;
   return 0;
 }
 
 void *scudoAlignedAlloc(uptr Alignment, uptr Size) {
-  // size must be a multiple of the alignment. To avoid a division, we first
-  // make sure that alignment is a power of 2.
-  CHECK(IsPowerOfTwo(Alignment));
-  CHECK_EQ((Size & (Alignment - 1)), 0);
-  return Instance.allocate(Size, Alignment, FromMalloc);
+  if (UNLIKELY(!CheckAlignedAllocAlignmentAndSize(Alignment, Size))) {
+    errno = errno_EINVAL;
+    return ScudoAllocator::FailureHandler::OnBadRequest();
+  }
+  return SetErrnoOnNull(Instance.allocate(Size, Alignment, FromMalloc));
 }
 
 uptr scudoMallocUsableSize(void *Ptr) {
@@ -661,15 +716,11 @@
 // MallocExtension helper functions
 
 uptr __sanitizer_get_current_allocated_bytes() {
-  uptr stats[AllocatorStatCount];
-  getAllocator().GetStats(stats);
-  return stats[AllocatorStatAllocated];
+  return Instance.getStats(AllocatorStatAllocated);
 }
 
 uptr __sanitizer_get_heap_size() {
-  uptr stats[AllocatorStatCount];
-  getAllocator().GetStats(stats);
-  return stats[AllocatorStatMapped];
+  return Instance.getStats(AllocatorStatMapped);
 }
 
 uptr __sanitizer_get_free_bytes() {
diff --git a/lib/scudo/scudo_allocator.h b/lib/scudo/scudo_allocator.h
index 6431a2a..29d8599 100644
--- a/lib/scudo/scudo_allocator.h
+++ b/lib/scudo/scudo_allocator.h
@@ -18,7 +18,9 @@
 
 #include "sanitizer_common/sanitizer_allocator.h"
 
-#include <atomic>
+#if !SANITIZER_LINUX
+# error "The Scudo hardened allocator is currently only supported on Linux."
+#endif
 
 namespace __scudo {
 
@@ -39,27 +41,28 @@
 // using functions such as GetBlockBegin, that is fairly costly. Our first
 // implementation used the MetaData as well, which offers the advantage of
 // being stored away from the chunk itself, but accessing it was costly as
-// well. The header will be atomically loaded and stored using the 16-byte
-// primitives offered by the platform (likely requires cmpxchg16b support).
+// well. The header will be atomically loaded and stored.
 typedef u64 PackedHeader;
 struct UnpackedHeader {
-  u64 Checksum    : 16;
-  u64 UnusedBytes : 20; // Needed for reallocation purposes.
-  u64 State       : 2;  // available, allocated, or quarantined
-  u64 AllocType   : 2;  // malloc, new, new[], or memalign
-  u64 Offset      : 16; // Offset from the beginning of the backend
-                        // allocation to the beginning of the chunk itself,
-                        // in multiples of MinAlignment. See comment about
-                        // its maximum value and test in init().
-  u64 Salt        : 8;
+  u64 Checksum          : 16;
+  u64 SizeOrUnusedBytes : 19; // Size for Primary backed allocations, amount of
+                              // unused bytes in the chunk for Secondary ones.
+  u64 FromPrimary       : 1;
+  u64 State             : 2;  // available, allocated, or quarantined
+  u64 AllocType         : 2;  // malloc, new, new[], or memalign
+  u64 Offset            : 16; // Offset from the beginning of the backend
+                              // allocation to the beginning of the chunk
+                              // itself, in multiples of MinAlignment. See
+                              // comment about its maximum value and in init().
+  u64 Salt              : 8;
 };
 
-typedef std::atomic<PackedHeader> AtomicPackedHeader;
+typedef atomic_uint64_t AtomicPackedHeader;
 COMPILER_CHECK(sizeof(UnpackedHeader) == sizeof(PackedHeader));
 
 // Minimum alignment of 8 bytes for 32-bit, 16 for 64-bit
 const uptr MinAlignmentLog = FIRST_32_SECOND_64(3, 4);
-const uptr MaxAlignmentLog = 24; // 16 MB
+const uptr MaxAlignmentLog = 24;  // 16 MB
 const uptr MinAlignment = 1 << MinAlignmentLog;
 const uptr MaxAlignment = 1 << MaxAlignmentLog;
 
@@ -67,21 +70,66 @@
 const uptr AlignedChunkHeaderSize =
     (ChunkHeaderSize + MinAlignment - 1) & ~(MinAlignment - 1);
 
-struct AllocatorOptions {
-  u32 QuarantineSizeMb;
-  u32 ThreadLocalQuarantineSizeKb;
-  bool MayReturnNull;
-  s32 ReleaseToOSIntervalMs;
-  bool DeallocationTypeMismatch;
-  bool DeleteSizeMismatch;
-  bool ZeroContents;
-
-  void setFrom(const Flags *f, const CommonFlags *cf);
-  void copyTo(Flags *f, CommonFlags *cf) const;
+#if SANITIZER_CAN_USE_ALLOCATOR64
+const uptr AllocatorSpace = ~0ULL;
+# if defined(__aarch64__) && SANITIZER_ANDROID
+const uptr AllocatorSize = 0x4000000000ULL;  // 256G.
+# elif defined(__aarch64__)
+const uptr AllocatorSize = 0x10000000000ULL;  // 1T.
+# else
+const uptr AllocatorSize = 0x40000000000ULL;  // 4T.
+# endif
+typedef DefaultSizeClassMap SizeClassMap;
+struct AP64 {
+  static const uptr kSpaceBeg = AllocatorSpace;
+  static const uptr kSpaceSize = AllocatorSize;
+  static const uptr kMetadataSize = 0;
+  typedef __scudo::SizeClassMap SizeClassMap;
+  typedef NoOpMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags =
+      SizeClassAllocator64FlagMasks::kRandomShuffleChunks;
 };
+typedef SizeClassAllocator64<AP64> PrimaryAllocator;
+#else
+// Currently, the 32-bit Sanitizer allocator has not yet benefited from all the
+// security improvements brought to the 64-bit one. This makes the 32-bit
+// version of Scudo slightly less toughened.
+static const uptr RegionSizeLog = 20;
+static const uptr NumRegions = SANITIZER_MMAP_RANGE_SIZE >> RegionSizeLog;
+# if SANITIZER_WORDSIZE == 32
+typedef FlatByteMap<NumRegions> ByteMap;
+# elif SANITIZER_WORDSIZE == 64
+typedef TwoLevelByteMap<(NumRegions >> 12), 1 << 12> ByteMap;
+# endif  // SANITIZER_WORDSIZE
+typedef DefaultSizeClassMap SizeClassMap;
+struct AP32 {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+  static const uptr kMetadataSize = 0;
+  typedef __scudo::SizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = RegionSizeLog;
+  typedef __scudo::ByteMap ByteMap;
+  typedef NoOpMapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags =
+      SizeClassAllocator32FlagMasks::kRandomShuffleChunks;
+};
+typedef SizeClassAllocator32<AP32> PrimaryAllocator;
+#endif  // SANITIZER_CAN_USE_ALLOCATOR64
 
-void initAllocator(const AllocatorOptions &options);
-void drainQuarantine();
+// __sanitizer::RoundUp has a CHECK that is extraneous for us. Use our own.
+INLINE uptr RoundUpTo(uptr Size, uptr Boundary) {
+  return (Size + Boundary - 1) & ~(Boundary - 1);
+}
+
+#include "scudo_allocator_secondary.h"
+#include "scudo_allocator_combined.h"
+
+typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
+typedef ScudoLargeMmapAllocator SecondaryAllocator;
+typedef ScudoCombinedAllocator<PrimaryAllocator, AllocatorCache,
+    SecondaryAllocator> ScudoBackendAllocator;
+
+void initScudo();
 
 void *scudoMalloc(uptr Size, AllocType Type);
 void scudoFree(void *Ptr, AllocType Type);
@@ -95,8 +143,6 @@
 void *scudoAlignedAlloc(uptr Alignment, uptr Size);
 uptr scudoMallocUsableSize(void *Ptr);
 
-#include "scudo_allocator_secondary.h"
-
 }  // namespace __scudo
 
 #endif  // SCUDO_ALLOCATOR_H_
diff --git a/lib/scudo/scudo_allocator_combined.h b/lib/scudo/scudo_allocator_combined.h
new file mode 100644
index 0000000..7599c12
--- /dev/null
+++ b/lib/scudo/scudo_allocator_combined.h
@@ -0,0 +1,76 @@
+//===-- scudo_allocator_combined.h ------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo Combined Allocator, dispatches allocation & deallocation requests to
+/// the Primary or the Secondary backend allocators.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_ALLOCATOR_COMBINED_H_
+#define SCUDO_ALLOCATOR_COMBINED_H_
+
+#ifndef SCUDO_ALLOCATOR_H_
+#error "This file must be included inside scudo_allocator.h."
+#endif
+
+template <class PrimaryAllocator, class AllocatorCache,
+    class SecondaryAllocator>
+class ScudoCombinedAllocator {
+ public:
+  void init(s32 ReleaseToOSIntervalMs) {
+    Primary.Init(ReleaseToOSIntervalMs);
+    Secondary.Init();
+    Stats.Init();
+  }
+
+  // Primary allocations are always MinAlignment aligned, and as such do not
+  // require an Alignment parameter.
+  void *allocatePrimary(AllocatorCache *Cache, uptr Size) {
+    return Cache->Allocate(&Primary, Primary.ClassID(Size));
+  }
+
+  // Secondary allocations do not require a Cache, but do require an Alignment
+  // parameter.
+  void *allocateSecondary(uptr Size, uptr Alignment) {
+    return Secondary.Allocate(&Stats, Size, Alignment);
+  }
+
+  void deallocatePrimary(AllocatorCache *Cache, void *Ptr) {
+    Cache->Deallocate(&Primary, Primary.GetSizeClass(Ptr), Ptr);
+  }
+
+  void deallocateSecondary(void *Ptr) {
+    Secondary.Deallocate(&Stats, Ptr);
+  }
+
+  uptr getActuallyAllocatedSize(void *Ptr, bool FromPrimary) {
+    if (FromPrimary)
+      return PrimaryAllocator::ClassIdToSize(Primary.GetSizeClass(Ptr));
+    return Secondary.GetActuallyAllocatedSize(Ptr);
+  }
+
+  void initCache(AllocatorCache *Cache) {
+    Cache->Init(&Stats);
+  }
+
+  void destroyCache(AllocatorCache *Cache) {
+    Cache->Destroy(&Primary, &Stats);
+  }
+
+  void getStats(AllocatorStatCounters StatType) const {
+    Stats.Get(StatType);
+  }
+
+ private:
+  PrimaryAllocator Primary;
+  SecondaryAllocator Secondary;
+  AllocatorGlobalStats Stats;
+};
+
+#endif  // SCUDO_ALLOCATOR_COMBINED_H_
diff --git a/lib/scudo/scudo_allocator_secondary.h b/lib/scudo/scudo_allocator_secondary.h
index b984f0d..dbfb225 100644
--- a/lib/scudo/scudo_allocator_secondary.h
+++ b/lib/scudo/scudo_allocator_secondary.h
@@ -24,26 +24,24 @@
 class ScudoLargeMmapAllocator {
  public:
 
-  void Init(bool AllocatorMayReturnNull) {
+  void Init() {
     PageSize = GetPageSizeCached();
-    atomic_store(&MayReturnNull, AllocatorMayReturnNull, memory_order_relaxed);
   }
 
   void *Allocate(AllocatorStats *Stats, uptr Size, uptr Alignment) {
+    uptr UserSize = Size - AlignedChunkHeaderSize;
     // The Scudo frontend prevents us from allocating more than
     // MaxAllowedMallocSize, so integer overflow checks would be superfluous.
     uptr MapSize = Size + SecondaryHeaderSize;
+    if (Alignment > MinAlignment)
+      MapSize += Alignment;
     MapSize = RoundUpTo(MapSize, PageSize);
     // Account for 2 guard pages, one before and one after the chunk.
     MapSize += 2 * PageSize;
-    // The size passed to the Secondary comprises the alignment, if large
-    // enough. Subtract it here to get the requested size, including header.
-    if (Alignment > MinAlignment)
-      Size -= Alignment;
 
     uptr MapBeg = reinterpret_cast<uptr>(MmapNoAccess(MapSize));
     if (MapBeg == ~static_cast<uptr>(0))
-      return ReturnNullOrDieOnOOM();
+      return ReturnNullOrDieOnFailure::OnOOM();
     // A page-aligned pointer is assumed after that, so check it now.
     CHECK(IsAligned(MapBeg, PageSize));
     uptr MapEnd = MapBeg + MapSize;
@@ -51,32 +49,32 @@
     // initial guard page, and both headers. This is the pointer that has to
     // abide by alignment requirements.
     uptr UserBeg = MapBeg + PageSize + HeadersSize;
+    uptr UserEnd = UserBeg + UserSize;
 
     // In the rare event of larger alignments, we will attempt to fit the mmap
     // area better and unmap extraneous memory. This will also ensure that the
     // offset and unused bytes field of the header stay small.
     if (Alignment > MinAlignment) {
-      if (UserBeg & (Alignment - 1))
-        UserBeg += Alignment - (UserBeg & (Alignment - 1));
-      CHECK_GE(UserBeg, MapBeg);
-      uptr NewMapBeg = RoundDownTo(UserBeg - HeadersSize, PageSize) - PageSize;
-      CHECK_GE(NewMapBeg, MapBeg);
-      uptr NewMapEnd = RoundUpTo(UserBeg + (Size - AlignedChunkHeaderSize),
-                                 PageSize) + PageSize;
-      CHECK_LE(NewMapEnd, MapEnd);
-      // Unmap the extra memory if it's large enough, on both sides.
-      uptr Diff = NewMapBeg - MapBeg;
-      if (Diff > PageSize)
-        UnmapOrDie(reinterpret_cast<void *>(MapBeg), Diff);
-      Diff = MapEnd - NewMapEnd;
-      if (Diff > PageSize)
-        UnmapOrDie(reinterpret_cast<void *>(NewMapEnd), Diff);
-      MapBeg = NewMapBeg;
-      MapEnd = NewMapEnd;
-      MapSize = NewMapEnd - NewMapBeg;
+      if (!IsAligned(UserBeg, Alignment)) {
+        UserBeg = RoundUpTo(UserBeg, Alignment);
+        CHECK_GE(UserBeg, MapBeg);
+        uptr NewMapBeg = RoundDownTo(UserBeg - HeadersSize, PageSize) -
+            PageSize;
+        CHECK_GE(NewMapBeg, MapBeg);
+        if (NewMapBeg != MapBeg) {
+          UnmapOrDie(reinterpret_cast<void *>(MapBeg), NewMapBeg - MapBeg);
+          MapBeg = NewMapBeg;
+        }
+        UserEnd = UserBeg + UserSize;
+      }
+      uptr NewMapEnd = RoundUpTo(UserEnd, PageSize) + PageSize;
+      if (NewMapEnd != MapEnd) {
+        UnmapOrDie(reinterpret_cast<void *>(NewMapEnd), MapEnd - NewMapEnd);
+        MapEnd = NewMapEnd;
+      }
+      MapSize = MapEnd - MapBeg;
     }
 
-    uptr UserEnd = UserBeg + (Size - AlignedChunkHeaderSize);
     CHECK_LE(UserEnd, MapEnd - PageSize);
     // Actually mmap the memory, preserving the guard pages on either side.
     CHECK_EQ(MapBeg + PageSize, reinterpret_cast<uptr>(
@@ -88,83 +86,35 @@
     // The primary adds the whole class size to the stats when allocating a
     // chunk, so we will do something similar here. But we will not account for
     // the guard pages.
-    Stats->Add(AllocatorStatAllocated, MapSize - 2 * PageSize);
-    Stats->Add(AllocatorStatMapped, MapSize - 2 * PageSize);
+    {
+      SpinMutexLock l(&StatsMutex);
+      Stats->Add(AllocatorStatAllocated, MapSize - 2 * PageSize);
+      Stats->Add(AllocatorStatMapped, MapSize - 2 * PageSize);
+    }
 
-    return reinterpret_cast<void *>(UserBeg);
-  }
-
-  void *ReturnNullOrDieOnBadRequest() {
-    if (atomic_load(&MayReturnNull, memory_order_acquire))
-      return nullptr;
-    ReportAllocatorCannotReturnNull(false);
-  }
-
-  void *ReturnNullOrDieOnOOM() {
-    if (atomic_load(&MayReturnNull, memory_order_acquire))
-      return nullptr;
-    ReportAllocatorCannotReturnNull(true);
-  }
-
-  void SetMayReturnNull(bool AllocatorMayReturnNull) {
-    atomic_store(&MayReturnNull, AllocatorMayReturnNull, memory_order_release);
+    return reinterpret_cast<void *>(Ptr);
   }
 
   void Deallocate(AllocatorStats *Stats, void *Ptr) {
     SecondaryHeader *Header = getHeader(Ptr);
-    Stats->Sub(AllocatorStatAllocated, Header->MapSize - 2 * PageSize);
-    Stats->Sub(AllocatorStatMapped, Header->MapSize - 2 * PageSize);
+    {
+      SpinMutexLock l(&StatsMutex);
+      Stats->Sub(AllocatorStatAllocated, Header->MapSize - 2 * PageSize);
+      Stats->Sub(AllocatorStatMapped, Header->MapSize - 2 * PageSize);
+    }
     UnmapOrDie(reinterpret_cast<void *>(Header->MapBeg), Header->MapSize);
   }
 
-  uptr TotalMemoryUsed() {
-    UNIMPLEMENTED();
-  }
-
-  bool PointerIsMine(const void *Ptr) {
-    UNIMPLEMENTED();
-  }
-
   uptr GetActuallyAllocatedSize(void *Ptr) {
     SecondaryHeader *Header = getHeader(Ptr);
-    // Deduct PageSize as MapEnd includes the trailing guard page.
+    // Deduct PageSize as MapSize includes the trailing guard page.
     uptr MapEnd = Header->MapBeg + Header->MapSize - PageSize;
     return MapEnd - reinterpret_cast<uptr>(Ptr);
   }
 
-  void *GetMetaData(const void *Ptr) {
-    UNIMPLEMENTED();
-  }
-
-  void *GetBlockBegin(const void *Ptr) {
-    UNIMPLEMENTED();
-  }
-
-  void *GetBlockBeginFastLocked(void *Ptr) {
-    UNIMPLEMENTED();
-  }
-
-  void PrintStats() {
-    UNIMPLEMENTED();
-  }
-
-  void ForceLock() {
-    UNIMPLEMENTED();
-  }
-
-  void ForceUnlock() {
-    UNIMPLEMENTED();
-  }
-
-  void ForEachChunk(ForEachChunkCallback Callback, void *Arg) {
-    UNIMPLEMENTED();
-  }
-
  private:
   // A Secondary allocated chunk header contains the base of the mapping and
-  // its size. Currently, the base is always a page before the header, but
-  // we might want to extend that number in the future based on the size of
-  // the allocation.
+  // its size, which comprises the guard pages.
   struct SecondaryHeader {
     uptr MapBeg;
     uptr MapSize;
@@ -182,7 +132,7 @@
   const uptr SecondaryHeaderSize = sizeof(SecondaryHeader);
   const uptr HeadersSize = SecondaryHeaderSize + AlignedChunkHeaderSize;
   uptr PageSize;
-  atomic_uint8_t MayReturnNull;
+  SpinMutex StatsMutex;
 };
 
 #endif  // SCUDO_ALLOCATOR_SECONDARY_H_
diff --git a/lib/scudo/scudo_crc32.cpp b/lib/scudo/scudo_crc32.cpp
index 94c8c24..a267dc4 100644
--- a/lib/scudo/scudo_crc32.cpp
+++ b/lib/scudo/scudo_crc32.cpp
@@ -12,42 +12,14 @@
 ///
 //===----------------------------------------------------------------------===//
 
-// Hardware CRC32 is supported at compilation via the following:
-// - for i386 & x86_64: -msse4.2
-// - for ARM & AArch64: -march=armv8-a+crc or -mcrc
-// An additional check must be performed at runtime as well to make sure the
-// emitted instructions are valid on the target host.
 #include "scudo_crc32.h"
-#include "scudo_utils.h"
-
-#if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
-# ifdef __SSE4_2__
-#  include <smmintrin.h>
-#  define CRC32_INTRINSIC FIRST_32_SECOND_64(_mm_crc32_u32, _mm_crc32_u64)
-# endif
-# ifdef __ARM_FEATURE_CRC32
-#  include <arm_acle.h>
-#  define CRC32_INTRINSIC FIRST_32_SECOND_64(__crc32cw, __crc32cd)
-# endif
-#endif  // defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
 
 namespace __scudo {
 
 #if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
-INLINE u32 computeHardwareCRC32(u32 Crc, uptr Data) {
+u32 computeHardwareCRC32(u32 Crc, uptr Data) {
   return CRC32_INTRINSIC(Crc, Data);
 }
-
-u32 computeCRC32(u32 Crc, uptr Data, u8 HashType) {
-  if (HashType == CRC32Hardware) {
-    return computeHardwareCRC32(Crc, Data);
-  }
-  return computeSoftwareCRC32(Crc, Data);
-}
-#else
-u32 computeCRC32(u32 Crc, uptr Data, u8 HashType) {
-  return computeSoftwareCRC32(Crc, Data);
-}
 #endif  // defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
 
 }  // namespace __scudo
diff --git a/lib/scudo/scudo_crc32.h b/lib/scudo/scudo_crc32.h
index 6635cc7..5ffcc62 100644
--- a/lib/scudo/scudo_crc32.h
+++ b/lib/scudo/scudo_crc32.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 ///
-/// Header for scudo_crc32.cpp.
+/// Scudo chunk header checksum related definitions.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -16,6 +16,23 @@
 
 #include "sanitizer_common/sanitizer_internal_defs.h"
 
+// Hardware CRC32 is supported at compilation via the following:
+// - for i386 & x86_64: -msse4.2
+// - for ARM & AArch64: -march=armv8-a+crc or -mcrc
+// An additional check must be performed at runtime as well to make sure the
+// emitted instructions are valid on the target host.
+
+#if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
+# ifdef __SSE4_2__
+#  include <smmintrin.h>
+#  define CRC32_INTRINSIC FIRST_32_SECOND_64(_mm_crc32_u32, _mm_crc32_u64)
+# endif
+# ifdef __ARM_FEATURE_CRC32
+#  include <arm_acle.h>
+#  define CRC32_INTRINSIC FIRST_32_SECOND_64(__crc32cw, __crc32cd)
+# endif
+#endif  // defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32)
+
 namespace __scudo {
 
 enum : u8 {
@@ -23,7 +40,61 @@
   CRC32Hardware = 1,
 };
 
-u32 computeCRC32(u32 Crc, uptr Data, u8 HashType);
+const static u32 CRC32Table[] = {
+  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+  0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+  0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+  0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+  0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+  0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+  0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+  0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+  0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+  0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+  0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+  0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+  0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+  0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+  0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+  0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+  0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+  0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+  0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+  0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+  0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+  0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+  0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+  0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+  0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+  0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+  0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+  0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+  0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+  0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+  0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+  0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+  0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+  0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+  0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+  0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+  0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+  0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+  0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+};
+
+INLINE u32 computeSoftwareCRC32(u32 Crc, uptr Data) {
+  for (uptr i = 0; i < sizeof(Data); i++) {
+    Crc = CRC32Table[(Crc ^ Data) & 0xff] ^ (Crc >> 8);
+    Data >>= 8;
+  }
+  return Crc;
+}
+
+SANITIZER_WEAK_ATTRIBUTE u32 computeHardwareCRC32(u32 Crc, uptr Data);
 
 }  // namespace __scudo
 
diff --git a/lib/scudo/scudo_flags.cpp b/lib/scudo/scudo_flags.cpp
index b9c8381..90f0cbf 100644
--- a/lib/scudo/scudo_flags.cpp
+++ b/lib/scudo/scudo_flags.cpp
@@ -68,7 +68,7 @@
   // Sanity checks and default settings for the Quarantine parameters.
 
   if (f->QuarantineSizeMb < 0) {
-    const int DefaultQuarantineSizeMb = 64;
+    const int DefaultQuarantineSizeMb = FIRST_32_SECOND_64(4, 16);
     f->QuarantineSizeMb = DefaultQuarantineSizeMb;
   }
   // We enforce an upper limit for the quarantine size of 4Gb.
@@ -76,7 +76,8 @@
     dieWithMessage("ERROR: the quarantine size is too large\n");
   }
   if (f->ThreadLocalQuarantineSizeKb < 0) {
-    const int DefaultThreadLocalQuarantineSizeKb = 1024;
+    const int DefaultThreadLocalQuarantineSizeKb =
+        FIRST_32_SECOND_64(64, 256);
     f->ThreadLocalQuarantineSizeKb = DefaultThreadLocalQuarantineSizeKb;
   }
   // And an upper limit of 128Mb for the thread quarantine cache.
@@ -84,6 +85,10 @@
     dieWithMessage("ERROR: the per thread quarantine cache size is too "
                    "large\n");
   }
+  if (f->ThreadLocalQuarantineSizeKb == 0 && f->QuarantineSizeMb > 0) {
+    dieWithMessage("ERROR: ThreadLocalQuarantineSizeKb can be set to 0 only "
+                   "when QuarantineSizeMb is set to 0\n");
+  }
 }
 
 Flags *getFlags() {
diff --git a/lib/scudo/scudo_flags.inc b/lib/scudo/scudo_flags.inc
index c7a2acf..45f9ea8 100644
--- a/lib/scudo/scudo_flags.inc
+++ b/lib/scudo/scudo_flags.inc
@@ -15,12 +15,14 @@
 # error "Define SCUDO_FLAG prior to including this file!"
 #endif
 
-SCUDO_FLAG(int, QuarantineSizeMb, 64,
+// Default value is set in scudo_flags.cpp based on architecture.
+SCUDO_FLAG(int, QuarantineSizeMb, -1,
            "Size (in Mb) of quarantine used to delay the actual deallocation "
            "of chunks. Lower value may reduce memory usage but decrease the "
            "effectiveness of the mitigation.")
 
-SCUDO_FLAG(int, ThreadLocalQuarantineSizeKb, 1024,
+// Default value is set in scudo_flags.cpp based on architecture.
+SCUDO_FLAG(int, ThreadLocalQuarantineSizeKb, -1,
           "Size (in Kb) of per-thread cache used to offload the global "
           "quarantine. Lower value may reduce memory usage but might increase "
           "the contention on the global quarantine.")
diff --git a/lib/scudo/scudo_new_delete.cpp b/lib/scudo/scudo_new_delete.cpp
index c022bd0..cdefb12 100644
--- a/lib/scudo/scudo_new_delete.cpp
+++ b/lib/scudo/scudo_new_delete.cpp
@@ -26,13 +26,18 @@
 struct nothrow_t {};
 }  // namespace std
 
+// TODO(alekseys): throw std::bad_alloc instead of dying on OOM.
 CXX_OPERATOR_ATTRIBUTE
 void *operator new(size_t size) {
-  return scudoMalloc(size, FromNew);
+  void *res = scudoMalloc(size, FromNew);
+  if (UNLIKELY(!res)) DieOnFailure::OnOOM();
+  return res;
 }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new[](size_t size) {
-  return scudoMalloc(size, FromNewArray);
+  void *res = scudoMalloc(size, FromNewArray);
+  if (UNLIKELY(!res)) DieOnFailure::OnOOM();
+  return res;
 }
 CXX_OPERATOR_ATTRIBUTE
 void *operator new(size_t size, std::nothrow_t const&) {
diff --git a/lib/scudo/scudo_tls.h b/lib/scudo/scudo_tls.h
new file mode 100644
index 0000000..20c4920
--- /dev/null
+++ b/lib/scudo/scudo_tls.h
@@ -0,0 +1,47 @@
+//===-- scudo_tls.h ---------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo thread local structure definition.
+/// Implementation will differ based on the thread local storage primitives
+/// offered by the underlying platform.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_TLS_H_
+#define SCUDO_TLS_H_
+
+#include "scudo_allocator.h"
+#include "scudo_utils.h"
+
+#include "sanitizer_common/sanitizer_linux.h"
+#include "sanitizer_common/sanitizer_platform.h"
+
+namespace __scudo {
+
+// Platform specific base thread context definitions.
+#include "scudo_tls_context_android.inc"
+#include "scudo_tls_context_linux.inc"
+
+struct ALIGNED(64) ScudoThreadContext : public ScudoThreadContextPlatform {
+  AllocatorCache Cache;
+  ScudoPrng Prng;
+  uptr QuarantineCachePlaceHolder[4];
+  void init();
+  void commitBack();
+};
+
+void initThread();
+
+// Platform specific dastpath functions definitions.
+#include "scudo_tls_android.inc"
+#include "scudo_tls_linux.inc"
+
+}  // namespace __scudo
+
+#endif  // SCUDO_TLS_H_
diff --git a/lib/scudo/scudo_tls_android.cpp b/lib/scudo/scudo_tls_android.cpp
new file mode 100644
index 0000000..ec74e37
--- /dev/null
+++ b/lib/scudo/scudo_tls_android.cpp
@@ -0,0 +1,95 @@
+//===-- scudo_tls_android.cpp -----------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo thread local structure implementation for Android.
+///
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+
+#if SANITIZER_LINUX && SANITIZER_ANDROID
+
+#include "scudo_tls.h"
+
+#include <pthread.h>
+
+namespace __scudo {
+
+static pthread_once_t GlobalInitialized = PTHREAD_ONCE_INIT;
+static pthread_key_t PThreadKey;
+
+static atomic_uint32_t ThreadContextCurrentIndex;
+static ScudoThreadContext *ThreadContexts;
+static uptr NumberOfContexts;
+
+// sysconf(_SC_NPROCESSORS_{CONF,ONLN}) cannot be used as they allocate memory.
+static uptr getNumberOfCPUs() {
+  cpu_set_t CPUs;
+  CHECK_EQ(sched_getaffinity(0, sizeof(cpu_set_t), &CPUs), 0);
+  return CPU_COUNT(&CPUs);
+}
+
+static void initOnce() {
+  // Hack: TLS_SLOT_TSAN was introduced in N. To be able to use it on M for
+  // testing, we create an unused key. Since the key_data array follows the tls
+  // array, it basically gives us the extra entry we need.
+  // TODO(kostyak): remove and restrict to N and above.
+  CHECK_EQ(pthread_key_create(&PThreadKey, NULL), 0);
+  initScudo();
+  NumberOfContexts = getNumberOfCPUs();
+  ThreadContexts = reinterpret_cast<ScudoThreadContext *>(
+      MmapOrDie(sizeof(ScudoThreadContext) * NumberOfContexts, __func__));
+  for (uptr i = 0; i < NumberOfContexts; i++)
+    ThreadContexts[i].init();
+}
+
+void initThread() {
+  pthread_once(&GlobalInitialized, initOnce);
+  // Initial context assignment is done in a plain round-robin fashion.
+  u32 Index = atomic_fetch_add(&ThreadContextCurrentIndex, 1,
+                               memory_order_relaxed);
+  ScudoThreadContext *ThreadContext =
+      &ThreadContexts[Index % NumberOfContexts];
+  *get_android_tls_ptr() = reinterpret_cast<uptr>(ThreadContext);
+}
+
+ScudoThreadContext *getThreadContextAndLockSlow() {
+  ScudoThreadContext *ThreadContext;
+  // Go through all the contexts and find the first unlocked one. 
+  for (u32 i = 0; i < NumberOfContexts; i++) {
+    ThreadContext = &ThreadContexts[i];
+    if (ThreadContext->tryLock()) {
+      *get_android_tls_ptr() = reinterpret_cast<uptr>(ThreadContext);
+      return ThreadContext;
+    }
+  }
+  // No luck, find the one with the lowest precedence, and slow lock it.
+  u64 Precedence = UINT64_MAX;
+  for (u32 i = 0; i < NumberOfContexts; i++) {
+    u64 SlowLockPrecedence = ThreadContexts[i].getSlowLockPrecedence();
+    if (SlowLockPrecedence && SlowLockPrecedence < Precedence) {
+      ThreadContext = &ThreadContexts[i];
+      Precedence = SlowLockPrecedence;
+    }
+  }
+  if (LIKELY(Precedence != UINT64_MAX)) {
+    ThreadContext->lock();
+    *get_android_tls_ptr() = reinterpret_cast<uptr>(ThreadContext);
+    return ThreadContext;
+  }
+  // Last resort (can this happen?), stick with the current one.
+  ThreadContext =
+      reinterpret_cast<ScudoThreadContext *>(*get_android_tls_ptr());
+  ThreadContext->lock();
+  return ThreadContext;
+}
+
+}  // namespace __scudo
+
+#endif  // SANITIZER_LINUX && SANITIZER_ANDROID
diff --git a/lib/scudo/scudo_tls_android.inc b/lib/scudo/scudo_tls_android.inc
new file mode 100644
index 0000000..8ecad7a
--- /dev/null
+++ b/lib/scudo/scudo_tls_android.inc
@@ -0,0 +1,44 @@
+//===-- scudo_tls_android.inc -----------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo thread local structure fastpath functions implementation for Android.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_TLS_ANDROID_H_
+#define SCUDO_TLS_ANDROID_H_
+
+#ifndef SCUDO_TLS_H_
+# error "This file must be included inside scudo_tls.h."
+#endif  // SCUDO_TLS_H_
+
+#if SANITIZER_LINUX && SANITIZER_ANDROID
+
+ALWAYS_INLINE void initThreadMaybe() {
+  if (LIKELY(*get_android_tls_ptr()))
+    return;
+  initThread();
+}
+
+ScudoThreadContext *getThreadContextAndLockSlow();
+
+ALWAYS_INLINE ScudoThreadContext *getThreadContextAndLock() {
+  ScudoThreadContext *ThreadContext =
+      reinterpret_cast<ScudoThreadContext *>(*get_android_tls_ptr());
+  CHECK(ThreadContext);
+  // Try to lock the currently associated context.
+  if (ThreadContext->tryLock())
+    return ThreadContext;
+  // If it failed, go the slow path.
+  return getThreadContextAndLockSlow();
+}
+
+#endif  // SANITIZER_LINUX && SANITIZER_ANDROID
+
+#endif  // SCUDO_TLS_ANDROID_H_
diff --git a/lib/scudo/scudo_tls_context_android.inc b/lib/scudo/scudo_tls_context_android.inc
new file mode 100644
index 0000000..f195131
--- /dev/null
+++ b/lib/scudo/scudo_tls_context_android.inc
@@ -0,0 +1,54 @@
+//===-- scudo_tls_context_android.inc ---------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Android specific base thread context definition.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_TLS_CONTEXT_ANDROID_INC_
+#define SCUDO_TLS_CONTEXT_ANDROID_INC_
+
+#ifndef SCUDO_TLS_H_
+# error "This file must be included inside scudo_tls.h."
+#endif  // SCUDO_TLS_H_
+
+#if SANITIZER_LINUX && SANITIZER_ANDROID
+
+struct ScudoThreadContextPlatform {
+  INLINE bool tryLock() {
+    if (Mutex.TryLock()) {
+      atomic_store_relaxed(&SlowLockPrecedence, 0);
+      return true;
+    }
+    if (atomic_load_relaxed(&SlowLockPrecedence) == 0)
+      atomic_store_relaxed(&SlowLockPrecedence, NanoTime());
+    return false;
+  }
+
+  INLINE void lock() {
+    Mutex.Lock();
+    atomic_store_relaxed(&SlowLockPrecedence, 0);
+  }
+
+  INLINE void unlock() {
+    Mutex.Unlock();
+  }
+
+  INLINE u64 getSlowLockPrecedence() {
+    return atomic_load_relaxed(&SlowLockPrecedence);
+  }
+
+ private:
+  StaticSpinMutex Mutex;
+  atomic_uint64_t SlowLockPrecedence;
+};
+
+#endif  // SANITIZER_LINUX && SANITIZER_ANDROID
+
+#endif  // SCUDO_TLS_CONTEXT_ANDROID_INC_
diff --git a/lib/scudo/scudo_tls_context_linux.inc b/lib/scudo/scudo_tls_context_linux.inc
new file mode 100644
index 0000000..8d292bd
--- /dev/null
+++ b/lib/scudo/scudo_tls_context_linux.inc
@@ -0,0 +1,29 @@
+//===-- scudo_tls_context_linux.inc -----------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Linux specific base thread context definition.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_TLS_CONTEXT_LINUX_INC_
+#define SCUDO_TLS_CONTEXT_LINUX_INC_
+
+#ifndef SCUDO_TLS_H_
+# error "This file must be included inside scudo_tls.h."
+#endif  // SCUDO_TLS_H_
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+struct ScudoThreadContextPlatform {
+  ALWAYS_INLINE void unlock() {}
+};
+
+#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#endif  // SCUDO_TLS_CONTEXT_LINUX_INC_
diff --git a/lib/scudo/scudo_tls_linux.cpp b/lib/scudo/scudo_tls_linux.cpp
new file mode 100644
index 0000000..1e38233
--- /dev/null
+++ b/lib/scudo/scudo_tls_linux.cpp
@@ -0,0 +1,66 @@
+//===-- scudo_tls_linux.cpp -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo thread local structure implementation for platforms supporting
+/// thread_local.
+///
+//===----------------------------------------------------------------------===//
+
+#include "sanitizer_common/sanitizer_platform.h"
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#include "scudo_tls.h"
+
+#include <pthread.h>
+
+namespace __scudo {
+
+static pthread_once_t GlobalInitialized = PTHREAD_ONCE_INIT;
+static pthread_key_t PThreadKey;
+
+__attribute__((tls_model("initial-exec")))
+THREADLOCAL ThreadState ScudoThreadState = ThreadNotInitialized;
+__attribute__((tls_model("initial-exec")))
+THREADLOCAL ScudoThreadContext ThreadLocalContext;
+
+static void teardownThread(void *Ptr) {
+  uptr I = reinterpret_cast<uptr>(Ptr);
+  // The glibc POSIX thread-local-storage deallocation routine calls user
+  // provided destructors in a loop of PTHREAD_DESTRUCTOR_ITERATIONS.
+  // We want to be called last since other destructors might call free and the
+  // like, so we wait until PTHREAD_DESTRUCTOR_ITERATIONS before draining the
+  // quarantine and swallowing the cache.
+  if (I > 1) {
+    // If pthread_setspecific fails, we will go ahead with the teardown.
+    if (LIKELY(pthread_setspecific(PThreadKey,
+                                   reinterpret_cast<void *>(I - 1)) == 0))
+      return;
+  }
+  ThreadLocalContext.commitBack();
+  ScudoThreadState = ThreadTornDown;
+}
+
+
+static void initOnce() {
+  CHECK_EQ(pthread_key_create(&PThreadKey, teardownThread), 0);
+  initScudo();
+}
+
+void initThread() {
+  CHECK_EQ(pthread_once(&GlobalInitialized, initOnce), 0);
+  CHECK_EQ(pthread_setspecific(PThreadKey, reinterpret_cast<void *>(
+      GetPthreadDestructorIterations())), 0);
+  ThreadLocalContext.init();
+  ScudoThreadState = ThreadInitialized;
+}
+
+}  // namespace __scudo
+
+#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
diff --git a/lib/scudo/scudo_tls_linux.inc b/lib/scudo/scudo_tls_linux.inc
new file mode 100644
index 0000000..242ee33
--- /dev/null
+++ b/lib/scudo/scudo_tls_linux.inc
@@ -0,0 +1,48 @@
+//===-- scudo_tls_linux.inc -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo thread local structure fastpath functions implementation for platforms
+/// supporting thread_local.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_TLS_LINUX_H_
+#define SCUDO_TLS_LINUX_H_
+
+#ifndef SCUDO_TLS_H_
+# error "This file must be included inside scudo_tls.h."
+#endif  // SCUDO_TLS_H_
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+enum ThreadState : u8 {
+  ThreadNotInitialized = 0,
+  ThreadInitialized,
+  ThreadTornDown,
+};
+__attribute__((tls_model("initial-exec")))
+extern THREADLOCAL ThreadState ScudoThreadState;
+__attribute__((tls_model("initial-exec")))
+extern THREADLOCAL ScudoThreadContext ThreadLocalContext;
+
+ALWAYS_INLINE void initThreadMaybe() {
+  if (LIKELY(ScudoThreadState != ThreadNotInitialized))
+    return;
+  initThread();
+}
+
+ALWAYS_INLINE ScudoThreadContext *getThreadContextAndLock() {
+  if (UNLIKELY(ScudoThreadState == ThreadTornDown))
+    return nullptr;
+  return &ThreadLocalContext;
+}
+
+#endif  // SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#endif  // SCUDO_TLS_LINUX_H_
diff --git a/lib/scudo/scudo_utils.cpp b/lib/scudo/scudo_utils.cpp
index ffa65b2..f7903ff 100644
--- a/lib/scudo/scudo_utils.cpp
+++ b/lib/scudo/scudo_utils.cpp
@@ -20,8 +20,9 @@
 #if defined(__x86_64__) || defined(__i386__)
 # include <cpuid.h>
 #endif
-
-#include <cstring>
+#if defined(__arm__) || defined(__aarch64__)
+# include <sys/auxv.h>
+#endif
 
 // TODO(kostyak): remove __sanitizer *Printf uses in favor for our own less
 //                complicated string formatting code. The following is a
@@ -82,12 +83,12 @@
 }
 
 #ifndef bit_SSE4_2
-#define bit_SSE4_2 bit_SSE42  // clang and gcc have different defines.
+# define bit_SSE4_2 bit_SSE42  // clang and gcc have different defines.
 #endif
 
 bool testCPUFeature(CPUFeature Feature)
 {
-  static CPUIDRegs FeaturesRegs = getCPUFeatures();
+  CPUIDRegs FeaturesRegs = getCPUFeatures();
 
   switch (Feature) {
     case CRC32CPUFeature:  // CRC32 is provided by SSE 4.2.
@@ -97,100 +98,29 @@
   }
   return false;
 }
+#elif defined(__arm__) || defined(__aarch64__)
+// For ARM and AArch64, hardware CRC32 support is indicated in the
+// AT_HWVAL auxiliary vector.
+
+#ifndef HWCAP_CRC32
+# define HWCAP_CRC32 (1<<7)  // HWCAP_CRC32 is missing on older platforms.
+#endif
+
+bool testCPUFeature(CPUFeature Feature) {
+  uptr HWCap = getauxval(AT_HWCAP);
+
+  switch (Feature) {
+    case CRC32CPUFeature:
+      return !!(HWCap & HWCAP_CRC32);
+    default:
+      break;
+  }
+  return false;
+}
 #else
 bool testCPUFeature(CPUFeature Feature) {
   return false;
 }
 #endif  // defined(__x86_64__) || defined(__i386__)
 
-// readRetry will attempt to read Count bytes from the Fd specified, and if
-// interrupted will retry to read additional bytes to reach Count.
-static ssize_t readRetry(int Fd, u8 *Buffer, size_t Count) {
-  ssize_t AmountRead = 0;
-  while (static_cast<size_t>(AmountRead) < Count) {
-    ssize_t Result = read(Fd, Buffer + AmountRead, Count - AmountRead);
-    if (Result > 0)
-      AmountRead += Result;
-    else if (!Result)
-      break;
-    else if (errno != EINTR) {
-      AmountRead = -1;
-      break;
-    }
-  }
-  return AmountRead;
-}
-
-static void fillRandom(u8 *Data, ssize_t Size) {
-  int Fd = open("/dev/urandom", O_RDONLY);
-  if (Fd < 0) {
-    dieWithMessage("ERROR: failed to open /dev/urandom.\n");
-  }
-  bool Success = readRetry(Fd, Data, Size) == Size;
-  close(Fd);
-  if (!Success) {
-    dieWithMessage("ERROR: failed to read enough data from /dev/urandom.\n");
-  }
-}
-
-// Default constructor for Xorshift128Plus seeds the state with /dev/urandom.
-// TODO(kostyak): investigate using getrandom() if available.
-Xorshift128Plus::Xorshift128Plus() {
-  fillRandom(reinterpret_cast<u8 *>(State), sizeof(State));
-}
-
-const static u32 CRC32Table[] = {
-  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-  0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-  0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-  0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-  0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-  0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-  0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
-  0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-  0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-  0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
-  0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-  0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-  0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-  0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-  0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-  0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-  0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-  0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-  0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-  0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-  0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-  0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-  0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-  0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-  0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-  0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-  0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-  0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-  0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-  0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-  0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-  0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-  0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-  0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-  0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-  0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-  0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-  0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-  0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-
-u32 computeSoftwareCRC32(u32 Crc, uptr Data) {
-  for (uptr i = 0; i < sizeof(Data); i++) {
-    Crc = CRC32Table[(Crc ^ Data) & 0xff] ^ (Crc >> 8);
-    Data >>= 8;
-  }
-  return Crc;
-}
-
 }  // namespace __scudo
diff --git a/lib/scudo/scudo_utils.h b/lib/scudo/scudo_utils.h
index ef2a609..6c6c9d8 100644
--- a/lib/scudo/scudo_utils.h
+++ b/lib/scudo/scudo_utils.h
@@ -36,25 +36,57 @@
 };
 bool testCPUFeature(CPUFeature feature);
 
-// Tiny PRNG based on https://en.wikipedia.org/wiki/Xorshift#xorshift.2B
-// The state (128 bits) will be stored in thread local storage.
-struct Xorshift128Plus {
+INLINE u64 rotl(const u64 X, int K) {
+  return (X << K) | (X >> (64 - K));
+}
+
+// XoRoShiRo128+ PRNG (http://xoroshiro.di.unimi.it/).
+struct XoRoShiRo128Plus {
  public:
-  Xorshift128Plus();
-  u64 Next() {
-    u64 x = State[0];
-    const u64 y = State[1];
-    State[0] = y;
-    x ^= x << 23;
-    State[1] = x ^ y ^ (x >> 17) ^ (y >> 26);
-    return State[1] + y;
+  void init() {
+    if (UNLIKELY(!GetRandom(reinterpret_cast<void *>(State), sizeof(State)))) {
+      // Early processes (eg: init) do not have /dev/urandom yet, but we still
+      // have to provide them with some degree of entropy. Not having a secure
+      // seed is not as problematic for them, as they are less likely to be
+      // the target of heap based vulnerabilities exploitation attempts.
+      State[0] = NanoTime();
+      State[1] = 0;
+    }
+    fillCache();
   }
+  u8 getU8() {
+    if (UNLIKELY(isCacheEmpty()))
+      fillCache();
+    const u8 Result = static_cast<u8>(CachedBytes & 0xff);
+    CachedBytes >>= 8;
+    CachedBytesAvailable--;
+    return Result;
+  }
+  u64 getU64() { return next(); }
+
  private:
+  u8 CachedBytesAvailable;
+  u64 CachedBytes;
   u64 State[2];
+  u64 next() {
+    const u64 S0 = State[0];
+    u64 S1 = State[1];
+    const u64 Result = S0 + S1;
+    S1 ^= S0;
+    State[0] = rotl(S0, 55) ^ S1 ^ (S1 << 14);
+    State[1] = rotl(S1, 36);
+    return Result;
+  }
+  bool isCacheEmpty() {
+    return CachedBytesAvailable == 0;
+  }
+  void fillCache() {
+    CachedBytes = next();
+    CachedBytesAvailable = sizeof(CachedBytes);
+  }
 };
 
-// Software CRC32 functions, to be used when hardware support is not detected.
-u32 computeSoftwareCRC32(u32 Crc, uptr Data);
+typedef XoRoShiRo128Plus ScudoPrng;
 
 }  // namespace __scudo
 
diff --git a/lib/tsan/CMakeLists.txt b/lib/tsan/CMakeLists.txt
index 195ecb5..193158c 100644
--- a/lib/tsan/CMakeLists.txt
+++ b/lib/tsan/CMakeLists.txt
@@ -100,7 +100,7 @@
 add_compiler_rt_component(tsan)
 
 if(APPLE)
-  set(TSAN_ASM_SOURCES rtl/tsan_rtl_amd64.S)
+  set(TSAN_ASM_SOURCES rtl/tsan_rtl_amd64.S rtl/tsan_rtl_aarch64.S)
   # Xcode will try to compile this file as C ('clang -x c'), and that will fail.
   if (${CMAKE_GENERATOR} STREQUAL "Xcode")
     enable_language(ASM)
diff --git a/lib/tsan/check_analyze.sh b/lib/tsan/check_analyze.sh
index a5d3632..54dd1b0 100755
--- a/lib/tsan/check_analyze.sh
+++ b/lib/tsan/check_analyze.sh
@@ -26,22 +26,16 @@
   fi
 }
 
-for f in write1; do
+for f in write1 write2 write4 write8; do
   check $f rsp 1
   check $f push 2
-  check $f pop 2
-done
-
-for f in write2 write4 write8; do
-  check $f rsp 1
-  check $f push 3
-  check $f pop 3
+  check $f pop 12
 done
 
 for f in read1 read2 read4 read8; do
   check $f rsp 1
-  check $f push 5
-  check $f pop 5
+  check $f push 3
+  check $f pop 3
 done
 
 for f in func_entry func_exit; do
diff --git a/lib/tsan/dd/dd_interceptors.cc b/lib/tsan/dd/dd_interceptors.cc
index 97c72dd..a39218f 100644
--- a/lib/tsan/dd/dd_interceptors.cc
+++ b/lib/tsan/dd/dd_interceptors.cc
@@ -270,20 +270,19 @@
 
 static void InitDataSeg() {
   MemoryMappingLayout proc_maps(true);
-  uptr start, end, offset;
   char name[128];
+  MemoryMappedSegment segment(name, ARRAY_SIZE(name));
   bool prev_is_data = false;
-  while (proc_maps.Next(&start, &end, &offset, name, ARRAY_SIZE(name),
-                        /*protection*/ 0)) {
-    bool is_data = offset != 0 && name[0] != 0;
+  while (proc_maps.Next(&segment)) {
+    bool is_data = segment.offset != 0 && segment.filename[0] != 0;
     // BSS may get merged with [heap] in /proc/self/maps. This is not very
     // reliable.
-    bool is_bss = offset == 0 &&
-      (name[0] == 0 || internal_strcmp(name, "[heap]") == 0) && prev_is_data;
-    if (g_data_start == 0 && is_data)
-      g_data_start = start;
-    if (is_bss)
-      g_data_end = end;
+    bool is_bss = segment.offset == 0 &&
+                  (segment.filename[0] == 0 ||
+                   internal_strcmp(segment.filename, "[heap]") == 0) &&
+                  prev_is_data;
+    if (g_data_start == 0 && is_data) g_data_start = segment.start;
+    if (is_bss) g_data_end = segment.end;
     prev_is_data = is_data;
   }
   VPrintf(1, "guessed data_start=%p data_end=%p\n",  g_data_start, g_data_end);
diff --git a/lib/tsan/go/buildgo.sh b/lib/tsan/go/buildgo.sh
index 5917680..617dd9e 100755
--- a/lib/tsan/go/buildgo.sh
+++ b/lib/tsan/go/buildgo.sh
@@ -69,7 +69,7 @@
 	"
 elif [ "`uname -a | grep Darwin`" != "" ]; then
 	SUFFIX="darwin_amd64"
-	OSCFLAGS="-fPIC -Wno-unused-const-variable -Wno-unknown-warning-option -mmacosx-version-min=10.7"
+	OSCFLAGS="-fPIC -Wno-unused-const-variable -Wno-unknown-warning-option -isysroot $(xcodebuild -version -sdk macosx Path) -mmacosx-version-min=10.7"
 	OSLDFLAGS="-lpthread -fPIC -fpie -mmacosx-version-min=10.7"
 	SRCS="
 		$SRCS
diff --git a/lib/tsan/go/tsan_go.cc b/lib/tsan/go/tsan_go.cc
index 7fb4eb2..d7a9e0b 100644
--- a/lib/tsan/go/tsan_go.cc
+++ b/lib/tsan/go/tsan_go.cc
@@ -247,13 +247,17 @@
 }
 
 void __tsan_mutex_before_lock(ThreadState *thr, uptr addr, uptr write) {
+  if (write)
+    MutexPreLock(thr, 0, addr);
+  else
+    MutexPreReadLock(thr, 0, addr);
 }
 
 void __tsan_mutex_after_lock(ThreadState *thr, uptr addr, uptr write) {
   if (write)
-    MutexLock(thr, 0, addr);
+    MutexPostLock(thr, 0, addr);
   else
-    MutexReadLock(thr, 0, addr);
+    MutexPostReadLock(thr, 0, addr);
 }
 
 void __tsan_mutex_before_unlock(ThreadState *thr, uptr addr, uptr write) {
diff --git a/lib/tsan/rtl/tsan.syms.extra b/lib/tsan/rtl/tsan.syms.extra
index 22dfde9..ab5b5a4 100644
--- a/lib/tsan/rtl/tsan.syms.extra
+++ b/lib/tsan/rtl/tsan.syms.extra
@@ -9,6 +9,16 @@
 __tsan_unaligned*
 __tsan_release
 __tsan_acquire
+__tsan_mutex_create
+__tsan_mutex_destroy
+__tsan_mutex_pre_lock
+__tsan_mutex_post_lock
+__tsan_mutex_pre_unlock
+__tsan_mutex_post_unlock
+__tsan_mutex_pre_signal
+__tsan_mutex_post_signal
+__tsan_mutex_pre_divert
+__tsan_mutex_post_divert
 __ubsan_*
 Annotate*
 WTFAnnotate*
diff --git a/lib/tsan/rtl/tsan_clock.cc b/lib/tsan/rtl/tsan_clock.cc
index 32435ad..ef984a4 100644
--- a/lib/tsan/rtl/tsan_clock.cc
+++ b/lib/tsan/rtl/tsan_clock.cc
@@ -61,20 +61,13 @@
 // an exclusive lock; ThreadClock's are private to respective threads and so
 // do not need any protection.
 //
-// Description of ThreadClock state:
-// clk_ - fixed size vector clock.
-// nclk_ - effective size of the vector clock (the rest is zeros).
-// tid_ - index of the thread associated with he clock ("current thread").
-// last_acquire_ - current thread time when it acquired something from
-//   other threads.
-//
 // Description of SyncClock state:
 // clk_ - variable size vector clock, low kClkBits hold timestamp,
 //   the remaining bits hold "acquired" flag (the actual value is thread's
 //   reused counter);
 //   if acquried == thr->reused_, then the respective thread has already
-//   acquired this clock (except possibly dirty_tids_).
-// dirty_tids_ - holds up to two indeces in the vector clock that other threads
+//   acquired this clock (except possibly for dirty elements).
+// dirty_ - holds up to two indeces in the vector clock that other threads
 //   need to acquire regardless of "acquired" flag value;
 // release_store_tid_ - denotes that the clock state is a result of
 //   release-store operation by the thread with release_store_tid_ index.
@@ -90,18 +83,51 @@
 
 namespace __tsan {
 
+static atomic_uint32_t *ref_ptr(ClockBlock *cb) {
+  return reinterpret_cast<atomic_uint32_t *>(&cb->table[ClockBlock::kRefIdx]);
+}
+
+// Drop reference to the first level block idx.
+static void UnrefClockBlock(ClockCache *c, u32 idx, uptr blocks) {
+  ClockBlock *cb = ctx->clock_alloc.Map(idx);
+  atomic_uint32_t *ref = ref_ptr(cb);
+  u32 v = atomic_load(ref, memory_order_acquire);
+  for (;;) {
+    CHECK_GT(v, 0);
+    if (v == 1)
+      break;
+    if (atomic_compare_exchange_strong(ref, &v, v - 1, memory_order_acq_rel))
+      return;
+  }
+  // First level block owns second level blocks, so them as well.
+  for (uptr i = 0; i < blocks; i++)
+    ctx->clock_alloc.Free(c, cb->table[ClockBlock::kBlockIdx - i]);
+  ctx->clock_alloc.Free(c, idx);
+}
+
 ThreadClock::ThreadClock(unsigned tid, unsigned reused)
     : tid_(tid)
-    , reused_(reused + 1) {  // 0 has special meaning
+    , reused_(reused + 1)  // 0 has special meaning
+    , cached_idx_()
+    , cached_size_()
+    , cached_blocks_() {
   CHECK_LT(tid, kMaxTidInClock);
   CHECK_EQ(reused_, ((u64)reused_ << kClkBits) >> kClkBits);
   nclk_ = tid_ + 1;
   last_acquire_ = 0;
   internal_memset(clk_, 0, sizeof(clk_));
-  clk_[tid_].reused = reused_;
 }
 
-void ThreadClock::acquire(ClockCache *c, const SyncClock *src) {
+void ThreadClock::ResetCached(ClockCache *c) {
+  if (cached_idx_) {
+    UnrefClockBlock(c, cached_idx_, cached_blocks_);
+    cached_idx_ = 0;
+    cached_size_ = 0;
+    cached_blocks_ = 0;
+  }
+}
+
+void ThreadClock::acquire(ClockCache *c, SyncClock *src) {
   DCHECK_LE(nclk_, kMaxTid);
   DCHECK_LE(src->size_, kMaxTid);
   CPP_STAT_INC(StatClockAcquire);
@@ -113,52 +139,46 @@
     return;
   }
 
-  // Check if we've already acquired src after the last release operation on src
   bool acquired = false;
-  if (nclk > tid_) {
-    CPP_STAT_INC(StatClockAcquireLarge);
-    if (src->elem(tid_).reused == reused_) {
-      CPP_STAT_INC(StatClockAcquireRepeat);
-      for (unsigned i = 0; i < kDirtyTids; i++) {
-        unsigned tid = src->dirty_tids_[i];
-        if (tid != kInvalidTid) {
-          u64 epoch = src->elem(tid).epoch;
-          if (clk_[tid].epoch < epoch) {
-            clk_[tid].epoch = epoch;
-            acquired = true;
-          }
-        }
+  for (unsigned i = 0; i < kDirtyTids; i++) {
+    SyncClock::Dirty dirty = src->dirty_[i];
+    unsigned tid = dirty.tid;
+    if (tid != kInvalidTid) {
+      if (clk_[tid] < dirty.epoch) {
+        clk_[tid] = dirty.epoch;
+        acquired = true;
       }
-      if (acquired) {
-        CPP_STAT_INC(StatClockAcquiredSomething);
-        last_acquire_ = clk_[tid_].epoch;
-      }
-      return;
     }
   }
 
-  // O(N) acquire.
-  CPP_STAT_INC(StatClockAcquireFull);
-  nclk_ = max(nclk_, nclk);
-  for (uptr i = 0; i < nclk; i++) {
-    u64 epoch = src->elem(i).epoch;
-    if (clk_[i].epoch < epoch) {
-      clk_[i].epoch = epoch;
-      acquired = true;
+  // Check if we've already acquired src after the last release operation on src
+  if (tid_ >= nclk || src->elem(tid_).reused != reused_) {
+    // O(N) acquire.
+    CPP_STAT_INC(StatClockAcquireFull);
+    nclk_ = max(nclk_, nclk);
+    u64 *dst_pos = &clk_[0];
+    for (ClockElem &src_elem : *src) {
+      u64 epoch = src_elem.epoch;
+      if (*dst_pos < epoch) {
+        *dst_pos = epoch;
+        acquired = true;
+      }
+      dst_pos++;
     }
-  }
 
-  // Remember that this thread has acquired this clock.
-  if (nclk > tid_)
-    src->elem(tid_).reused = reused_;
+    // Remember that this thread has acquired this clock.
+    if (nclk > tid_)
+      src->elem(tid_).reused = reused_;
+  }
 
   if (acquired) {
     CPP_STAT_INC(StatClockAcquiredSomething);
-    last_acquire_ = clk_[tid_].epoch;
+    last_acquire_ = clk_[tid_];
+    ResetCached(c);
   }
 }
 
-void ThreadClock::release(ClockCache *c, SyncClock *dst) const {
+void ThreadClock::release(ClockCache *c, SyncClock *dst) {
   DCHECK_LE(nclk_, kMaxTid);
   DCHECK_LE(dst->size_, kMaxTid);
 
@@ -178,7 +198,7 @@
   // since the last release on dst. If so, we need to update
   // only dst->elem(tid_).
   if (dst->elem(tid_).epoch > last_acquire_) {
-    UpdateCurrentThread(dst);
+    UpdateCurrentThread(c, dst);
     if (dst->release_store_tid_ != tid_ ||
         dst->release_store_reused_ != reused_)
       dst->release_store_tid_ = kInvalidTid;
@@ -187,23 +207,24 @@
 
   // O(N) release.
   CPP_STAT_INC(StatClockReleaseFull);
+  dst->Unshare(c);
   // First, remember whether we've acquired dst.
   bool acquired = IsAlreadyAcquired(dst);
   if (acquired)
     CPP_STAT_INC(StatClockReleaseAcquired);
   // Update dst->clk_.
-  for (uptr i = 0; i < nclk_; i++) {
-    ClockElem &ce = dst->elem(i);
-    ce.epoch = max(ce.epoch, clk_[i].epoch);
+  dst->FlushDirty();
+  uptr i = 0;
+  for (ClockElem &ce : *dst) {
+    ce.epoch = max(ce.epoch, clk_[i]);
     ce.reused = 0;
+    i++;
   }
   // Clear 'acquired' flag in the remaining elements.
   if (nclk_ < dst->size_)
     CPP_STAT_INC(StatClockReleaseClearTail);
   for (uptr i = nclk_; i < dst->size_; i++)
     dst->elem(i).reused = 0;
-  for (unsigned i = 0; i < kDirtyTids; i++)
-    dst->dirty_tids_[i] = kInvalidTid;
   dst->release_store_tid_ = kInvalidTid;
   dst->release_store_reused_ = 0;
   // If we've acquired dst, remember this fact,
@@ -212,11 +233,37 @@
     dst->elem(tid_).reused = reused_;
 }
 
-void ThreadClock::ReleaseStore(ClockCache *c, SyncClock *dst) const {
+void ThreadClock::ReleaseStore(ClockCache *c, SyncClock *dst) {
   DCHECK_LE(nclk_, kMaxTid);
   DCHECK_LE(dst->size_, kMaxTid);
   CPP_STAT_INC(StatClockStore);
 
+  if (dst->size_ == 0 && cached_idx_ != 0) {
+    // Reuse the cached clock.
+    // Note: we could reuse/cache the cached clock in more cases:
+    // we could update the existing clock and cache it, or replace it with the
+    // currently cached clock and release the old one. And for a shared
+    // existing clock, we could replace it with the currently cached;
+    // or unshare, update and cache. But, for simplicity, we currnetly reuse
+    // cached clock only when the target clock is empty.
+    dst->tab_ = ctx->clock_alloc.Map(cached_idx_);
+    dst->tab_idx_ = cached_idx_;
+    dst->size_ = cached_size_;
+    dst->blocks_ = cached_blocks_;
+    CHECK_EQ(dst->dirty_[0].tid, kInvalidTid);
+    // The cached clock is shared (immutable),
+    // so this is where we store the current clock.
+    dst->dirty_[0].tid = tid_;
+    dst->dirty_[0].epoch = clk_[tid_];
+    dst->release_store_tid_ = tid_;
+    dst->release_store_reused_ = reused_;
+    // Rememeber that we don't need to acquire it in future.
+    dst->elem(tid_).reused = reused_;
+    // Grab a reference.
+    atomic_fetch_add(ref_ptr(dst->tab_), 1, memory_order_relaxed);
+    return;
+  }
+
   // Check if we need to resize dst.
   if (dst->size_ < nclk_)
     dst->Resize(c, nclk_);
@@ -225,32 +272,41 @@
       dst->release_store_reused_ == reused_ &&
       dst->elem(tid_).epoch > last_acquire_) {
     CPP_STAT_INC(StatClockStoreFast);
-    UpdateCurrentThread(dst);
+    UpdateCurrentThread(c, dst);
     return;
   }
 
   // O(N) release-store.
   CPP_STAT_INC(StatClockStoreFull);
-  for (uptr i = 0; i < nclk_; i++) {
-    ClockElem &ce = dst->elem(i);
-    ce.epoch = clk_[i].epoch;
+  dst->Unshare(c);
+  // Note: dst can be larger than this ThreadClock.
+  // This is fine since clk_ beyond size is all zeros.
+  uptr i = 0;
+  for (ClockElem &ce : *dst) {
+    ce.epoch = clk_[i];
     ce.reused = 0;
+    i++;
   }
-  // Clear the tail of dst->clk_.
-  if (nclk_ < dst->size_) {
-    for (uptr i = nclk_; i < dst->size_; i++) {
-      ClockElem &ce = dst->elem(i);
-      ce.epoch = 0;
-      ce.reused = 0;
-    }
-    CPP_STAT_INC(StatClockStoreTail);
-  }
-  for (unsigned i = 0; i < kDirtyTids; i++)
-    dst->dirty_tids_[i] = kInvalidTid;
+  for (uptr i = 0; i < kDirtyTids; i++)
+    dst->dirty_[i].tid = kInvalidTid;
   dst->release_store_tid_ = tid_;
   dst->release_store_reused_ = reused_;
   // Rememeber that we don't need to acquire it in future.
   dst->elem(tid_).reused = reused_;
+
+  // If the resulting clock is cachable, cache it for future release operations.
+  // The clock is always cachable if we released to an empty sync object.
+  if (cached_idx_ == 0 && dst->Cachable()) {
+    // Grab a reference to the ClockBlock.
+    atomic_uint32_t *ref = ref_ptr(dst->tab_);
+    if (atomic_load(ref, memory_order_acquire) == 1)
+      atomic_store_relaxed(ref, 2);
+    else
+      atomic_fetch_add(ref_ptr(dst->tab_), 1, memory_order_relaxed);
+    cached_idx_ = dst->tab_idx_;
+    cached_size_ = dst->size_;
+    cached_blocks_ = dst->blocks_;
+  }
 }
 
 void ThreadClock::acq_rel(ClockCache *c, SyncClock *dst) {
@@ -260,157 +316,248 @@
 }
 
 // Updates only single element related to the current thread in dst->clk_.
-void ThreadClock::UpdateCurrentThread(SyncClock *dst) const {
+void ThreadClock::UpdateCurrentThread(ClockCache *c, SyncClock *dst) const {
   // Update the threads time, but preserve 'acquired' flag.
-  dst->elem(tid_).epoch = clk_[tid_].epoch;
-
   for (unsigned i = 0; i < kDirtyTids; i++) {
-    if (dst->dirty_tids_[i] == tid_) {
-      CPP_STAT_INC(StatClockReleaseFast1);
-      return;
-    }
-    if (dst->dirty_tids_[i] == kInvalidTid) {
-      CPP_STAT_INC(StatClockReleaseFast2);
-      dst->dirty_tids_[i] = tid_;
+    SyncClock::Dirty *dirty = &dst->dirty_[i];
+    const unsigned tid = dirty->tid;
+    if (tid == tid_ || tid == kInvalidTid) {
+      CPP_STAT_INC(StatClockReleaseFast);
+      dirty->tid = tid_;
+      dirty->epoch = clk_[tid_];
       return;
     }
   }
   // Reset all 'acquired' flags, O(N).
+  // We are going to touch dst elements, so we need to unshare it.
+  dst->Unshare(c);
   CPP_STAT_INC(StatClockReleaseSlow);
+  dst->elem(tid_).epoch = clk_[tid_];
   for (uptr i = 0; i < dst->size_; i++)
     dst->elem(i).reused = 0;
-  for (unsigned i = 0; i < kDirtyTids; i++)
-    dst->dirty_tids_[i] = kInvalidTid;
+  dst->FlushDirty();
 }
 
-// Checks whether the current threads has already acquired src.
+// Checks whether the current thread has already acquired src.
 bool ThreadClock::IsAlreadyAcquired(const SyncClock *src) const {
   if (src->elem(tid_).reused != reused_)
     return false;
   for (unsigned i = 0; i < kDirtyTids; i++) {
-    unsigned tid = src->dirty_tids_[i];
-    if (tid != kInvalidTid) {
-      if (clk_[tid].epoch < src->elem(tid).epoch)
+    SyncClock::Dirty dirty = src->dirty_[i];
+    if (dirty.tid != kInvalidTid) {
+      if (clk_[dirty.tid] < dirty.epoch)
         return false;
     }
   }
   return true;
 }
 
-void SyncClock::Resize(ClockCache *c, uptr nclk) {
-  CPP_STAT_INC(StatClockReleaseResize);
-  if (RoundUpTo(nclk, ClockBlock::kClockCount) <=
-      RoundUpTo(size_, ClockBlock::kClockCount)) {
-    // Growing within the same block.
-    // Memory is already allocated, just increase the size.
-    size_ = nclk;
-    return;
-  }
-  if (nclk <= ClockBlock::kClockCount) {
-    // Grow from 0 to one-level table.
-    CHECK_EQ(size_, 0);
-    CHECK_EQ(tab_, 0);
-    CHECK_EQ(tab_idx_, 0);
-    size_ = nclk;
-    tab_idx_ = ctx->clock_alloc.Alloc(c);
-    tab_ = ctx->clock_alloc.Map(tab_idx_);
-    internal_memset(tab_, 0, sizeof(*tab_));
-    return;
-  }
-  // Growing two-level table.
-  if (size_ == 0) {
-    // Allocate first level table.
-    tab_idx_ = ctx->clock_alloc.Alloc(c);
-    tab_ = ctx->clock_alloc.Map(tab_idx_);
-    internal_memset(tab_, 0, sizeof(*tab_));
-  } else if (size_ <= ClockBlock::kClockCount) {
-    // Transform one-level table to two-level table.
-    u32 old = tab_idx_;
-    tab_idx_ = ctx->clock_alloc.Alloc(c);
-    tab_ = ctx->clock_alloc.Map(tab_idx_);
-    internal_memset(tab_, 0, sizeof(*tab_));
-    tab_->table[0] = old;
-  }
-  // At this point we have first level table allocated.
-  // Add second level tables as necessary.
-  for (uptr i = RoundUpTo(size_, ClockBlock::kClockCount);
-      i < nclk; i += ClockBlock::kClockCount) {
-    u32 idx = ctx->clock_alloc.Alloc(c);
-    ClockBlock *cb = ctx->clock_alloc.Map(idx);
-    internal_memset(cb, 0, sizeof(*cb));
-    CHECK_EQ(tab_->table[i/ClockBlock::kClockCount], 0);
-    tab_->table[i/ClockBlock::kClockCount] = idx;
-  }
-  size_ = nclk;
-}
-
 // Sets a single element in the vector clock.
 // This function is called only from weird places like AcquireGlobal.
-void ThreadClock::set(unsigned tid, u64 v) {
+void ThreadClock::set(ClockCache *c, unsigned tid, u64 v) {
   DCHECK_LT(tid, kMaxTid);
-  DCHECK_GE(v, clk_[tid].epoch);
-  clk_[tid].epoch = v;
+  DCHECK_GE(v, clk_[tid]);
+  clk_[tid] = v;
   if (nclk_ <= tid)
     nclk_ = tid + 1;
-  last_acquire_ = clk_[tid_].epoch;
+  last_acquire_ = clk_[tid_];
+  ResetCached(c);
 }
 
 void ThreadClock::DebugDump(int(*printf)(const char *s, ...)) {
   printf("clock=[");
   for (uptr i = 0; i < nclk_; i++)
-    printf("%s%llu", i == 0 ? "" : ",", clk_[i].epoch);
-  printf("] reused=[");
-  for (uptr i = 0; i < nclk_; i++)
-    printf("%s%llu", i == 0 ? "" : ",", clk_[i].reused);
-  printf("] tid=%u/%u last_acq=%llu",
-      tid_, reused_, last_acquire_);
+    printf("%s%llu", i == 0 ? "" : ",", clk_[i]);
+  printf("] tid=%u/%u last_acq=%llu", tid_, reused_, last_acquire_);
 }
 
-SyncClock::SyncClock()
-    : release_store_tid_(kInvalidTid)
-    , release_store_reused_()
-    , tab_()
-    , tab_idx_()
-    , size_() {
-  for (uptr i = 0; i < kDirtyTids; i++)
-    dirty_tids_[i] = kInvalidTid;
+SyncClock::SyncClock() {
+  ResetImpl();
 }
 
 SyncClock::~SyncClock() {
   // Reset must be called before dtor.
   CHECK_EQ(size_, 0);
+  CHECK_EQ(blocks_, 0);
   CHECK_EQ(tab_, 0);
   CHECK_EQ(tab_idx_, 0);
 }
 
 void SyncClock::Reset(ClockCache *c) {
-  if (size_ == 0) {
-    // nothing
-  } else if (size_ <= ClockBlock::kClockCount) {
-    // One-level table.
-    ctx->clock_alloc.Free(c, tab_idx_);
-  } else {
-    // Two-level table.
-    for (uptr i = 0; i < size_; i += ClockBlock::kClockCount)
-      ctx->clock_alloc.Free(c, tab_->table[i / ClockBlock::kClockCount]);
-    ctx->clock_alloc.Free(c, tab_idx_);
-  }
+  if (size_)
+    UnrefClockBlock(c, tab_idx_, blocks_);
+  ResetImpl();
+}
+
+void SyncClock::ResetImpl() {
   tab_ = 0;
   tab_idx_ = 0;
   size_ = 0;
+  blocks_ = 0;
   release_store_tid_ = kInvalidTid;
   release_store_reused_ = 0;
   for (uptr i = 0; i < kDirtyTids; i++)
-    dirty_tids_[i] = kInvalidTid;
+    dirty_[i].tid = kInvalidTid;
 }
 
-ClockElem &SyncClock::elem(unsigned tid) const {
+void SyncClock::Resize(ClockCache *c, uptr nclk) {
+  CPP_STAT_INC(StatClockReleaseResize);
+  Unshare(c);
+  if (nclk <= capacity()) {
+    // Memory is already allocated, just increase the size.
+    size_ = nclk;
+    return;
+  }
+  if (size_ == 0) {
+    // Grow from 0 to one-level table.
+    CHECK_EQ(size_, 0);
+    CHECK_EQ(blocks_, 0);
+    CHECK_EQ(tab_, 0);
+    CHECK_EQ(tab_idx_, 0);
+    tab_idx_ = ctx->clock_alloc.Alloc(c);
+    tab_ = ctx->clock_alloc.Map(tab_idx_);
+    internal_memset(tab_, 0, sizeof(*tab_));
+    atomic_store_relaxed(ref_ptr(tab_), 1);
+    size_ = 1;
+  } else if (size_ > blocks_ * ClockBlock::kClockCount) {
+    u32 idx = ctx->clock_alloc.Alloc(c);
+    ClockBlock *new_cb = ctx->clock_alloc.Map(idx);
+    uptr top = size_ - blocks_ * ClockBlock::kClockCount;
+    CHECK_LT(top, ClockBlock::kClockCount);
+    const uptr move = top * sizeof(tab_->clock[0]);
+    internal_memcpy(&new_cb->clock[0], tab_->clock, move);
+    internal_memset(&new_cb->clock[top], 0, sizeof(*new_cb) - move);
+    internal_memset(tab_->clock, 0, move);
+    append_block(idx);
+  }
+  // At this point we have first level table allocated and all clock elements
+  // are evacuated from it to a second level block.
+  // Add second level tables as necessary.
+  while (nclk > capacity()) {
+    u32 idx = ctx->clock_alloc.Alloc(c);
+    ClockBlock *cb = ctx->clock_alloc.Map(idx);
+    internal_memset(cb, 0, sizeof(*cb));
+    append_block(idx);
+  }
+  size_ = nclk;
+}
+
+// Flushes all dirty elements into the main clock array.
+void SyncClock::FlushDirty() {
+  for (unsigned i = 0; i < kDirtyTids; i++) {
+    Dirty *dirty = &dirty_[i];
+    if (dirty->tid != kInvalidTid) {
+      CHECK_LT(dirty->tid, size_);
+      elem(dirty->tid).epoch = dirty->epoch;
+      dirty->tid = kInvalidTid;
+    }
+  }
+}
+
+bool SyncClock::IsShared() const {
+  if (size_ == 0)
+    return false;
+  atomic_uint32_t *ref = ref_ptr(tab_);
+  u32 v = atomic_load(ref, memory_order_acquire);
+  CHECK_GT(v, 0);
+  return v > 1;
+}
+
+// Unshares the current clock if it's shared.
+// Shared clocks are immutable, so they need to be unshared before any updates.
+// Note: this does not apply to dirty entries as they are not shared.
+void SyncClock::Unshare(ClockCache *c) {
+  if (!IsShared())
+    return;
+  // First, copy current state into old.
+  SyncClock old;
+  old.tab_ = tab_;
+  old.tab_idx_ = tab_idx_;
+  old.size_ = size_;
+  old.blocks_ = blocks_;
+  old.release_store_tid_ = release_store_tid_;
+  old.release_store_reused_ = release_store_reused_;
+  for (unsigned i = 0; i < kDirtyTids; i++)
+    old.dirty_[i] = dirty_[i];
+  // Then, clear current object.
+  ResetImpl();
+  // Allocate brand new clock in the current object.
+  Resize(c, old.size_);
+  // Now copy state back into this object.
+  Iter old_iter(&old);
+  for (ClockElem &ce : *this) {
+    ce = *old_iter;
+    ++old_iter;
+  }
+  release_store_tid_ = old.release_store_tid_;
+  release_store_reused_ = old.release_store_reused_;
+  for (unsigned i = 0; i < kDirtyTids; i++)
+    dirty_[i] = old.dirty_[i];
+  // Drop reference to old and delete if necessary.
+  old.Reset(c);
+}
+
+// Can we cache this clock for future release operations?
+ALWAYS_INLINE bool SyncClock::Cachable() const {
+  if (size_ == 0)
+    return false;
+  for (unsigned i = 0; i < kDirtyTids; i++) {
+    if (dirty_[i].tid != kInvalidTid)
+      return false;
+  }
+  return atomic_load_relaxed(ref_ptr(tab_)) == 1;
+}
+
+// elem linearizes the two-level structure into linear array.
+// Note: this is used only for one time accesses, vector operations use
+// the iterator as it is much faster.
+ALWAYS_INLINE ClockElem &SyncClock::elem(unsigned tid) const {
   DCHECK_LT(tid, size_);
-  if (size_ <= ClockBlock::kClockCount)
+  const uptr block = tid / ClockBlock::kClockCount;
+  DCHECK_LE(block, blocks_);
+  tid %= ClockBlock::kClockCount;
+  if (block == blocks_)
     return tab_->clock[tid];
-  u32 idx = tab_->table[tid / ClockBlock::kClockCount];
+  u32 idx = get_block(block);
   ClockBlock *cb = ctx->clock_alloc.Map(idx);
-  return cb->clock[tid % ClockBlock::kClockCount];
+  return cb->clock[tid];
+}
+
+ALWAYS_INLINE uptr SyncClock::capacity() const {
+  if (size_ == 0)
+    return 0;
+  uptr ratio = sizeof(ClockBlock::clock[0]) / sizeof(ClockBlock::table[0]);
+  // How many clock elements we can fit into the first level block.
+  // +1 for ref counter.
+  uptr top = ClockBlock::kClockCount - RoundUpTo(blocks_ + 1, ratio) / ratio;
+  return blocks_ * ClockBlock::kClockCount + top;
+}
+
+ALWAYS_INLINE u32 SyncClock::get_block(uptr bi) const {
+  DCHECK(size_);
+  DCHECK_LT(bi, blocks_);
+  return tab_->table[ClockBlock::kBlockIdx - bi];
+}
+
+ALWAYS_INLINE void SyncClock::append_block(u32 idx) {
+  uptr bi = blocks_++;
+  CHECK_EQ(get_block(bi), 0);
+  tab_->table[ClockBlock::kBlockIdx - bi] = idx;
+}
+
+// Used only by tests.
+u64 SyncClock::get(unsigned tid) const {
+  for (unsigned i = 0; i < kDirtyTids; i++) {
+    Dirty dirty = dirty_[i];
+    if (dirty.tid == tid)
+      return dirty.epoch;
+  }
+  return elem(tid).epoch;
+}
+
+// Used only by Iter test.
+u64 SyncClock::get_clean(unsigned tid) const {
+  return elem(tid).epoch;
 }
 
 void SyncClock::DebugDump(int(*printf)(const char *s, ...)) {
@@ -420,8 +567,32 @@
   printf("] reused=[");
   for (uptr i = 0; i < size_; i++)
     printf("%s%llu", i == 0 ? "" : ",", elem(i).reused);
-  printf("] release_store_tid=%d/%d dirty_tids=%d/%d",
+  printf("] release_store_tid=%d/%d dirty_tids=%d[%llu]/%d[%llu]",
       release_store_tid_, release_store_reused_,
-      dirty_tids_[0], dirty_tids_[1]);
+      dirty_[0].tid, dirty_[0].epoch,
+      dirty_[1].tid, dirty_[1].epoch);
+}
+
+void SyncClock::Iter::Next() {
+  // Finished with the current block, move on to the next one.
+  block_++;
+  if (block_ < parent_->blocks_) {
+    // Iterate over the next second level block.
+    u32 idx = parent_->get_block(block_);
+    ClockBlock *cb = ctx->clock_alloc.Map(idx);
+    pos_ = &cb->clock[0];
+    end_ = pos_ + min(parent_->size_ - block_ * ClockBlock::kClockCount,
+        ClockBlock::kClockCount);
+    return;
+  }
+  if (block_ == parent_->blocks_ &&
+      parent_->size_ > parent_->blocks_ * ClockBlock::kClockCount) {
+    // Iterate over elements in the first level block.
+    pos_ = &parent_->tab_->clock[0];
+    end_ = pos_ + min(parent_->size_ - block_ * ClockBlock::kClockCount,
+        ClockBlock::kClockCount);
+    return;
+  }
+  parent_ = nullptr;  // denotes end
 }
 }  // namespace __tsan
diff --git a/lib/tsan/rtl/tsan_clock.h b/lib/tsan/rtl/tsan_clock.h
index 4e352cb..a891d7b 100644
--- a/lib/tsan/rtl/tsan_clock.h
+++ b/lib/tsan/rtl/tsan_clock.h
@@ -18,25 +18,6 @@
 
 namespace __tsan {
 
-struct ClockElem {
-  u64 epoch  : kClkBits;
-  u64 reused : 64 - kClkBits;
-};
-
-struct ClockBlock {
-  static const uptr kSize = 512;
-  static const uptr kTableSize = kSize / sizeof(u32);
-  static const uptr kClockCount = kSize / sizeof(ClockElem);
-
-  union {
-    u32       table[kTableSize];
-    ClockElem clock[kClockCount];
-  };
-
-  ClockBlock() {
-  }
-};
-
 typedef DenseSlabAlloc<ClockBlock, 1<<16, 1<<10> ClockAlloc;
 typedef DenseSlabAllocCache ClockCache;
 
@@ -46,84 +27,200 @@
   SyncClock();
   ~SyncClock();
 
-  uptr size() const {
-    return size_;
-  }
+  uptr size() const;
 
-  u64 get(unsigned tid) const {
-    return elem(tid).epoch;
-  }
+  // These are used only in tests.
+  u64 get(unsigned tid) const;
+  u64 get_clean(unsigned tid) const;
 
   void Resize(ClockCache *c, uptr nclk);
   void Reset(ClockCache *c);
 
   void DebugDump(int(*printf)(const char *s, ...));
 
+  // Clock element iterator.
+  // Note: it iterates only over the table without regard to dirty entries.
+  class Iter {
+   public:
+    explicit Iter(SyncClock* parent);
+    Iter& operator++();
+    bool operator!=(const Iter& other);
+    ClockElem &operator*();
+
+   private:
+    SyncClock *parent_;
+    // [pos_, end_) is the current continuous range of clock elements.
+    ClockElem *pos_;
+    ClockElem *end_;
+    int block_;  // Current number of second level block.
+
+    NOINLINE void Next();
+  };
+
+  Iter begin();
+  Iter end();
+
  private:
-  friend struct ThreadClock;
+  friend class ThreadClock;
+  friend class Iter;
   static const uptr kDirtyTids = 2;
 
+  struct Dirty {
+    u64 epoch  : kClkBits;
+    u64 tid : 64 - kClkBits;  // kInvalidId if not active
+  };
+
   unsigned release_store_tid_;
   unsigned release_store_reused_;
-  unsigned dirty_tids_[kDirtyTids];
-  // tab_ contains indirect pointer to a 512b block using DenseSlabAlloc.
-  // If size_ <= 64, then tab_ points to an array with 64 ClockElem's.
-  // Otherwise, tab_ points to an array with 128 u32 elements,
+  Dirty dirty_[kDirtyTids];
+  // If size_ is 0, tab_ is nullptr.
+  // If size <= 64 (kClockCount), tab_ contains pointer to an array with
+  // 64 ClockElem's (ClockBlock::clock).
+  // Otherwise, tab_ points to an array with up to 127 u32 elements,
   // each pointing to the second-level 512b block with 64 ClockElem's.
+  // Unused space in the first level ClockBlock is used to store additional
+  // clock elements.
+  // The last u32 element in the first level ClockBlock is always used as
+  // reference counter.
+  //
+  // See the following scheme for details.
+  // All memory blocks are 512 bytes (allocated from ClockAlloc).
+  // Clock (clk) elements are 64 bits.
+  // Idx and ref are 32 bits.
+  //
+  // tab_
+  //    |
+  //    \/
+  //    +----------------------------------------------------+
+  //    | clk128 | clk129 | ...unused... | idx1 | idx0 | ref |
+  //    +----------------------------------------------------+
+  //                                        |      |
+  //                                        |      \/
+  //                                        |      +----------------+
+  //                                        |      | clk0 ... clk63 |
+  //                                        |      +----------------+
+  //                                        \/
+  //                                        +------------------+
+  //                                        | clk64 ... clk127 |
+  //                                        +------------------+
+  //
+  // Note: dirty entries, if active, always override what's stored in the clock.
   ClockBlock *tab_;
   u32 tab_idx_;
-  u32 size_;
+  u16 size_;
+  u16 blocks_;  // Number of second level blocks.
 
+  void Unshare(ClockCache *c);
+  bool IsShared() const;
+  bool Cachable() const;
+  void ResetImpl();
+  void FlushDirty();
+  uptr capacity() const;
+  u32 get_block(uptr bi) const;
+  void append_block(u32 idx);
   ClockElem &elem(unsigned tid) const;
 };
 
 // The clock that lives in threads.
-struct ThreadClock {
+class ThreadClock {
  public:
   typedef DenseSlabAllocCache Cache;
 
   explicit ThreadClock(unsigned tid, unsigned reused = 0);
 
-  u64 get(unsigned tid) const {
-    DCHECK_LT(tid, kMaxTidInClock);
-    return clk_[tid].epoch;
-  }
+  u64 get(unsigned tid) const;
+  void set(ClockCache *c, unsigned tid, u64 v);
+  void set(u64 v);
+  void tick();
+  uptr size() const;
 
-  void set(unsigned tid, u64 v);
-
-  void set(u64 v) {
-    DCHECK_GE(v, clk_[tid_].epoch);
-    clk_[tid_].epoch = v;
-  }
-
-  void tick() {
-    clk_[tid_].epoch++;
-  }
-
-  uptr size() const {
-    return nclk_;
-  }
-
-  void acquire(ClockCache *c, const SyncClock *src);
-  void release(ClockCache *c, SyncClock *dst) const;
+  void acquire(ClockCache *c, SyncClock *src);
+  void release(ClockCache *c, SyncClock *dst);
   void acq_rel(ClockCache *c, SyncClock *dst);
-  void ReleaseStore(ClockCache *c, SyncClock *dst) const;
+  void ReleaseStore(ClockCache *c, SyncClock *dst);
+  void ResetCached(ClockCache *c);
 
   void DebugReset();
   void DebugDump(int(*printf)(const char *s, ...));
 
  private:
   static const uptr kDirtyTids = SyncClock::kDirtyTids;
+  // Index of the thread associated with he clock ("current thread").
   const unsigned tid_;
-  const unsigned reused_;
+  const unsigned reused_;  // tid_ reuse count.
+  // Current thread time when it acquired something from other threads.
   u64 last_acquire_;
+
+  // Cached SyncClock (without dirty entries and release_store_tid_).
+  // We reuse it for subsequent store-release operations without intervening
+  // acquire operations. Since it is shared (and thus constant), clock value
+  // for the current thread is then stored in dirty entries in the SyncClock.
+  // We host a refernece to the table while it is cached here.
+  u32 cached_idx_;
+  u16 cached_size_;
+  u16 cached_blocks_;
+
+  // Number of active elements in the clk_ table (the rest is zeros).
   uptr nclk_;
-  ClockElem clk_[kMaxTidInClock];
+  u64 clk_[kMaxTidInClock];  // Fixed size vector clock.
 
   bool IsAlreadyAcquired(const SyncClock *src) const;
-  void UpdateCurrentThread(SyncClock *dst) const;
+  void UpdateCurrentThread(ClockCache *c, SyncClock *dst) const;
 };
 
+ALWAYS_INLINE u64 ThreadClock::get(unsigned tid) const {
+  DCHECK_LT(tid, kMaxTidInClock);
+  return clk_[tid];
+}
+
+ALWAYS_INLINE void ThreadClock::set(u64 v) {
+  DCHECK_GE(v, clk_[tid_]);
+  clk_[tid_] = v;
+}
+
+ALWAYS_INLINE void ThreadClock::tick() {
+  clk_[tid_]++;
+}
+
+ALWAYS_INLINE uptr ThreadClock::size() const {
+  return nclk_;
+}
+
+ALWAYS_INLINE SyncClock::Iter SyncClock::begin() {
+  return Iter(this);
+}
+
+ALWAYS_INLINE SyncClock::Iter SyncClock::end() {
+  return Iter(nullptr);
+}
+
+ALWAYS_INLINE uptr SyncClock::size() const {
+  return size_;
+}
+
+ALWAYS_INLINE SyncClock::Iter::Iter(SyncClock* parent)
+    : parent_(parent)
+    , pos_(nullptr)
+    , end_(nullptr)
+    , block_(-1) {
+  if (parent)
+    Next();
+}
+
+ALWAYS_INLINE SyncClock::Iter& SyncClock::Iter::operator++() {
+  pos_++;
+  if (UNLIKELY(pos_ >= end_))
+    Next();
+  return *this;
+}
+
+ALWAYS_INLINE bool SyncClock::Iter::operator!=(const SyncClock::Iter& other) {
+  return parent_ != other.parent_;
+}
+
+ALWAYS_INLINE ClockElem &SyncClock::Iter::operator*() {
+  return *pos_;
+}
 }  // namespace __tsan
 
 #endif  // TSAN_CLOCK_H
diff --git a/lib/tsan/rtl/tsan_debugging.cc b/lib/tsan/rtl/tsan_debugging.cc
index 9b9c717..a44b136 100644
--- a/lib/tsan/rtl/tsan_debugging.cc
+++ b/lib/tsan/rtl/tsan_debugging.cc
@@ -25,7 +25,6 @@
   if (typ == ReportTypeUseAfterFree) return "heap-use-after-free";
   if (typ == ReportTypeVptrUseAfterFree) return "heap-use-after-free-vptr";
   if (typ == ReportTypeExternalRace) return "external-race";
-  if (typ == ReportTypeSwiftAccessRace) return "swift-access-race";
   if (typ == ReportTypeThreadLeak) return "thread-leak";
   if (typ == ReportTypeMutexDestroyLocked) return "locked-mutex-destroy";
   if (typ == ReportTypeMutexDoubleLock) return "mutex-double-lock";
@@ -152,7 +151,7 @@
 }
 
 SANITIZER_INTERFACE_ATTRIBUTE
-int __tsan_get_report_thread(void *report, uptr idx, int *tid, uptr *os_id,
+int __tsan_get_report_thread(void *report, uptr idx, int *tid, tid_t *os_id,
                              int *running, const char **name, int *parent_tid,
                              void **trace, uptr trace_size) {
   const ReportDesc *rep = (ReportDesc *)report;
@@ -229,7 +228,7 @@
 
 SANITIZER_INTERFACE_ATTRIBUTE
 int __tsan_get_alloc_stack(uptr addr, uptr *trace, uptr size, int *thread_id,
-                           uptr *os_id) {
+                           tid_t *os_id) {
   MBlock *b = 0;
   Allocator *a = allocator();
   if (a->PointerIsMine((void *)addr)) {
diff --git a/lib/tsan/rtl/tsan_defs.h b/lib/tsan/rtl/tsan_defs.h
index 8a0381e..3c775de 100644
--- a/lib/tsan/rtl/tsan_defs.h
+++ b/lib/tsan/rtl/tsan_defs.h
@@ -38,15 +38,40 @@
 
 namespace __tsan {
 
+const int kClkBits = 42;
+const unsigned kMaxTidReuse = (1 << (64 - kClkBits)) - 1;
+
+struct ClockElem {
+  u64 epoch  : kClkBits;
+  u64 reused : 64 - kClkBits;  // tid reuse count
+};
+
+struct ClockBlock {
+  static const uptr kSize = 512;
+  static const uptr kTableSize = kSize / sizeof(u32);
+  static const uptr kClockCount = kSize / sizeof(ClockElem);
+  static const uptr kRefIdx = kTableSize - 1;
+  static const uptr kBlockIdx = kTableSize - 2;
+
+  union {
+    u32       table[kTableSize];
+    ClockElem clock[kClockCount];
+  };
+
+  ClockBlock() {
+  }
+};
+
 const int kTidBits = 13;
-const unsigned kMaxTid = 1 << kTidBits;
+// Reduce kMaxTid by kClockCount because one slot in ClockBlock table is
+// occupied by reference counter, so total number of elements we can store
+// in SyncClock is kClockCount * (kTableSize - 1).
+const unsigned kMaxTid = (1 << kTidBits) - ClockBlock::kClockCount;
 #if !SANITIZER_GO
 const unsigned kMaxTidInClock = kMaxTid * 2;  // This includes msb 'freed' bit.
 #else
 const unsigned kMaxTidInClock = kMaxTid;  // Go does not track freed memory.
 #endif
-const int kClkBits = 42;
-const unsigned kMaxTidReuse = (1 << (64 - kClkBits)) - 1;
 const uptr kShadowStackSize = 64 * 1024;
 
 // Count of shadow values in a shadow cell.
@@ -74,7 +99,7 @@
 const bool kCollectHistory = true;
 #endif
 
-const unsigned kInvalidTid = (unsigned)-1;
+const u16 kInvalidTid = kMaxTid + 1;
 
 // The following "build consistency" machinery ensures that all source files
 // are built in the same configuration. Inconsistent builds lead to
@@ -157,6 +182,15 @@
 
 COMPILER_CHECK(sizeof(MBlock) == 16);
 
+enum ExternalTag : uptr {
+  kExternalTagNone = 0,
+  kExternalTagSwiftModifyingAccess = 1,
+  kExternalTagFirstUserAvailable = 2,
+  kExternalTagMax = 1024,
+  // Don't set kExternalTagMax over 65,536, since MBlock only stores tags
+  // as 16-bit values, see tsan_defs.h.
+};
+
 }  // namespace __tsan
 
 #endif  // TSAN_DEFS_H
diff --git a/lib/tsan/rtl/tsan_dense_alloc.h b/lib/tsan/rtl/tsan_dense_alloc.h
index e9815c9..16dbdf3 100644
--- a/lib/tsan/rtl/tsan_dense_alloc.h
+++ b/lib/tsan/rtl/tsan_dense_alloc.h
@@ -39,7 +39,7 @@
   typedef DenseSlabAllocCache Cache;
   typedef typename Cache::IndexT IndexT;
 
-  DenseSlabAlloc() {
+  explicit DenseSlabAlloc(const char *name) {
     // Check that kL1Size and kL2Size are sane.
     CHECK_EQ(kL1Size & (kL1Size - 1), 0);
     CHECK_EQ(kL2Size & (kL2Size - 1), 0);
@@ -49,6 +49,7 @@
     internal_memset(map_, 0, sizeof(map_));
     freelist_ = 0;
     fillpos_ = 0;
+    name_ = name;
   }
 
   ~DenseSlabAlloc() {
@@ -96,15 +97,19 @@
   SpinMutex mtx_;
   IndexT freelist_;
   uptr fillpos_;
+  const char *name_;
 
   void Refill(Cache *c) {
     SpinMutexLock lock(&mtx_);
     if (freelist_ == 0) {
       if (fillpos_ == kL1Size) {
-        Printf("ThreadSanitizer: DenseSlabAllocator overflow. Dying.\n");
+        Printf("ThreadSanitizer: %s overflow (%zu*%zu). Dying.\n",
+            name_, kL1Size, kL2Size);
         Die();
       }
-      T *batch = (T*)MmapOrDie(kL2Size * sizeof(T), "DenseSlabAllocator");
+      VPrintf(2, "ThreadSanitizer: growing %s: %zu out of %zu*%zu\n",
+          name_, fillpos_, kL1Size, kL2Size);
+      T *batch = (T*)MmapOrDie(kL2Size * sizeof(T), name_);
       // Reserve 0 as invalid index.
       IndexT start = fillpos_ == 0 ? 1 : 0;
       for (IndexT i = start; i < kL2Size; i++) {
diff --git a/lib/tsan/rtl/tsan_external.cc b/lib/tsan/rtl/tsan_external.cc
index 8c6b531..6c0e947 100644
--- a/lib/tsan/rtl/tsan_external.cc
+++ b/lib/tsan/rtl/tsan_external.cc
@@ -17,14 +17,30 @@
 
 #define CALLERPC ((uptr)__builtin_return_address(0))
 
-const char *registered_tags[kExternalTagMax];
-static atomic_uint32_t used_tags{kExternalTagFirstUserAvailable};  // NOLINT.
+struct TagData {
+  const char *object_type;
+  const char *header;
+};
 
-const char *GetObjectTypeFromTag(uptr tag) {
-  if (tag == 0) return nullptr;
+static TagData registered_tags[kExternalTagMax] = {
+  {},
+  {"Swift variable", "Swift access race"},
+};
+static atomic_uint32_t used_tags{kExternalTagFirstUserAvailable};  // NOLINT.
+static TagData *GetTagData(uptr tag) {
   // Invalid/corrupted tag?  Better return NULL and let the caller deal with it.
   if (tag >= atomic_load(&used_tags, memory_order_relaxed)) return nullptr;
-  return registered_tags[tag];
+  return &registered_tags[tag];
+}
+
+const char *GetObjectTypeFromTag(uptr tag) {
+  TagData *tag_data = GetTagData(tag);
+  return tag_data ? tag_data->object_type : nullptr;
+}
+
+const char *GetReportHeaderFromTag(uptr tag) {
+  TagData *tag_data = GetTagData(tag);
+  return tag_data ? tag_data->header : nullptr;
 }
 
 void InsertShadowStackFrameForTag(ThreadState *thr, uptr tag) {
@@ -34,9 +50,9 @@
 uptr TagFromShadowStackFrame(uptr pc) {
   uptr tag_count = atomic_load(&used_tags, memory_order_relaxed);
   void *pc_ptr = (void *)pc;
-  if (pc_ptr < &registered_tags[0] || pc_ptr >= &registered_tags[tag_count])
+  if (pc_ptr < GetTagData(0) || pc_ptr > GetTagData(tag_count - 1))
     return 0;
-  return (const char **)pc_ptr - &registered_tags[0];
+  return (TagData *)pc_ptr - GetTagData(0);
 }
 
 #if !SANITIZER_GO
@@ -49,7 +65,7 @@
   InsertShadowStackFrameForTag(thr, (uptr)tag);
   bool in_ignored_lib;
   if (!caller_pc || !libignore()->IsIgnored((uptr)caller_pc, &in_ignored_lib)) {
-    access(thr, CALLERPC, (uptr)addr, kSizeLog8);
+    access(thr, CALLERPC, (uptr)addr, kSizeLog1);
   }
   FuncExit(thr);
   if (caller_pc) FuncExit(thr);
@@ -60,11 +76,26 @@
 void *__tsan_external_register_tag(const char *object_type) {
   uptr new_tag = atomic_fetch_add(&used_tags, 1, memory_order_relaxed);
   CHECK_LT(new_tag, kExternalTagMax);
-  registered_tags[new_tag] = internal_strdup(object_type);
+  GetTagData(new_tag)->object_type = internal_strdup(object_type);
+  char header[127] = {0};
+  internal_snprintf(header, sizeof(header), "race on %s", object_type);
+  GetTagData(new_tag)->header = internal_strdup(header);
   return (void *)new_tag;
 }
 
 SANITIZER_INTERFACE_ATTRIBUTE
+void __tsan_external_register_header(void *tag, const char *header) {
+  CHECK_GE((uptr)tag, kExternalTagFirstUserAvailable);
+  CHECK_LT((uptr)tag, kExternalTagMax);
+  atomic_uintptr_t *header_ptr =
+      (atomic_uintptr_t *)&GetTagData((uptr)tag)->header;
+  header = internal_strdup(header);
+  char *old_header =
+      (char *)atomic_exchange(header_ptr, (uptr)header, memory_order_seq_cst);
+  if (old_header) internal_free(old_header);
+}
+
+SANITIZER_INTERFACE_ATTRIBUTE
 void __tsan_external_assign_tag(void *addr, void *tag) {
   CHECK_LT(tag, atomic_load(&used_tags, memory_order_relaxed));
   Allocator *a = allocator();
@@ -89,6 +120,6 @@
 }
 }  // extern "C"
 
-#endif
+#endif  // !SANITIZER_GO
 
 }  // namespace __tsan
diff --git a/lib/tsan/rtl/tsan_flags.cc b/lib/tsan/rtl/tsan_flags.cc
index b76f6cb..89e22a1 100644
--- a/lib/tsan/rtl/tsan_flags.cc
+++ b/lib/tsan/rtl/tsan_flags.cc
@@ -21,10 +21,6 @@
 
 namespace __tsan {
 
-Flags *flags() {
-  return &ctx->flags;
-}
-
 // Can be overriden in frontend.
 #ifdef TSAN_EXTERNAL_HOOKS
 extern "C" const char* __tsan_default_options();
@@ -69,7 +65,7 @@
       cf.detect_deadlocks = true;
     }
     cf.print_suppressions = false;
-    cf.stack_trace_format = "#%n %f %S %M";
+    cf.stack_trace_format = "    #%n %f %S %M";
     cf.exitcode = 66;
     cf.intercept_tls_get_addr = true;
     OverrideCommonFlags(cf);
diff --git a/lib/tsan/rtl/tsan_flags.h b/lib/tsan/rtl/tsan_flags.h
index e2f6b3c..66740de 100644
--- a/lib/tsan/rtl/tsan_flags.h
+++ b/lib/tsan/rtl/tsan_flags.h
@@ -28,7 +28,6 @@
   void ParseFromString(const char *str);
 };
 
-Flags *flags();
 void InitializeFlags(Flags *flags, const char *env);
 }  // namespace __tsan
 
diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc
index daa40d5..001123f 100644
--- a/lib/tsan/rtl/tsan_interceptors.cc
+++ b/lib/tsan/rtl/tsan_interceptors.cc
@@ -14,10 +14,12 @@
 //===----------------------------------------------------------------------===//
 
 #include "sanitizer_common/sanitizer_atomic.h"
+#include "sanitizer_common/sanitizer_errno.h"
 #include "sanitizer_common/sanitizer_libc.h"
 #include "sanitizer_common/sanitizer_linux.h"
 #include "sanitizer_common/sanitizer_platform_limits_posix.h"
 #include "sanitizer_common/sanitizer_placement_new.h"
+#include "sanitizer_common/sanitizer_posix.h"
 #include "sanitizer_common/sanitizer_stacktrace.h"
 #include "sanitizer_common/sanitizer_tls_get_addr.h"
 #include "interception/interception.h"
@@ -29,30 +31,18 @@
 #include "tsan_mman.h"
 #include "tsan_fd.h"
 
-#if SANITIZER_POSIX
-#include "sanitizer_common/sanitizer_posix.h"
-#endif
 
 using namespace __tsan;  // NOLINT
 
 #if SANITIZER_FREEBSD || SANITIZER_MAC
-#define __errno_location __error
 #define stdout __stdoutp
 #define stderr __stderrp
 #endif
 
 #if SANITIZER_ANDROID
-#define __errno_location __errno
 #define mallopt(a, b)
 #endif
 
-#if SANITIZER_LINUX || SANITIZER_FREEBSD
-#define PTHREAD_CREATE_DETACHED 1
-#elif SANITIZER_MAC
-#define PTHREAD_CREATE_DETACHED 2
-#endif
-
-
 #ifdef __mips__
 const int kSigCount = 129;
 #else
@@ -93,7 +83,6 @@
 DECLARE_REAL_AND_INTERCEPTOR(void, free, void *ptr)
 extern "C" void *pthread_self();
 extern "C" void _exit(int status);
-extern "C" int *__errno_location();
 extern "C" int fileno_unlocked(void *stream);
 extern "C" int dirfd(void *dirp);
 #if !SANITIZER_FREEBSD && !SANITIZER_ANDROID
@@ -107,9 +96,6 @@
 const int PTHREAD_MUTEX_RECURSIVE = 2;
 const int PTHREAD_MUTEX_RECURSIVE_NP = 2;
 #endif
-const int EINVAL = 22;
-const int EBUSY = 16;
-const int EOWNERDEAD = 130;
 #if !SANITIZER_FREEBSD && !SANITIZER_MAC
 const int EPOLL_CTL_ADD = 1;
 #endif
@@ -139,8 +125,6 @@
 # define F_TLOCK 2      /* Test and lock a region for exclusive use.  */
 # define F_TEST  3      /* Test a region for other processes locks.  */
 
-#define errno (*__errno_location())
-
 typedef void (*sighandler_t)(int sig);
 typedef void (*sigactionhandler_t)(int sig, my_siginfo_t *siginfo, void *uctx);
 
@@ -277,7 +261,7 @@
 
 void ScopedInterceptor::EnableIgnores() {
   if (ignoring_) {
-    ThreadIgnoreBegin(thr_, pc_, false);
+    ThreadIgnoreBegin(thr_, pc_, /*save_stack=*/false);
     if (flags()->ignore_noninstrumented_modules) thr_->suppress_reports++;
     if (in_ignored_lib_) {
       DCHECK(!thr_->in_ignored_lib);
@@ -475,8 +459,14 @@
 static void LongJmp(ThreadState *thr, uptr *env) {
 #ifdef __powerpc__
   uptr mangled_sp = env[0];
-#elif SANITIZER_FREEBSD || SANITIZER_MAC
+#elif SANITIZER_FREEBSD
   uptr mangled_sp = env[2];
+#elif SANITIZER_MAC
+# ifdef __aarch64__
+    uptr mangled_sp = env[13];
+# else
+    uptr mangled_sp = env[2];
+# endif
 #elif defined(SANITIZER_LINUX)
 # ifdef __aarch64__
   uptr mangled_sp = env[13];
@@ -674,7 +664,7 @@
   if (*addr) {
     if (!IsAppMem((uptr)*addr) || !IsAppMem((uptr)*addr + sz - 1)) {
       if (flags & MAP_FIXED) {
-        errno = EINVAL;
+        errno = errno_EINVAL;
         return false;
       } else {
         *addr = 0;
@@ -930,8 +920,7 @@
     ThreadIgnoreEnd(thr, pc);
   }
   if (res == 0) {
-    int tid = ThreadCreate(thr, pc, *(uptr*)th,
-                           detached == PTHREAD_CREATE_DETACHED);
+    int tid = ThreadCreate(thr, pc, *(uptr*)th, IsStateDetached(detached));
     CHECK_NE(tid, 0);
     // Synchronization on p.tid serves two purposes:
     // 1. ThreadCreate must finish before the new thread starts.
@@ -1027,7 +1016,7 @@
   ThreadSignalContext *ctx = SigCtx(arg->thr);
   CHECK_EQ(atomic_load(&ctx->in_blocking_func, memory_order_relaxed), 1);
   atomic_store(&ctx->in_blocking_func, 0, memory_order_relaxed);
-  MutexLock(arg->thr, arg->pc, (uptr)arg->m);
+  MutexPostLock(arg->thr, arg->pc, (uptr)arg->m, MutexFlagDoPreLockOnPostLock);
   // Undo BlockingCall ctor effects.
   arg->thr->ignore_interceptors--;
   arg->si->~ScopedInterceptor();
@@ -1056,7 +1045,7 @@
         fn, c, m, t, (void (*)(void *arg))cond_mutex_unlock, &arg);
   }
   if (res == errno_EOWNERDEAD) MutexRepair(thr, pc, (uptr)m);
-  MutexLock(thr, pc, (uptr)m);
+  MutexPostLock(thr, pc, (uptr)m, MutexFlagDoPreLockOnPostLock);
   return res;
 }
 
@@ -1116,14 +1105,15 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_mutex_init, m, a);
   int res = REAL(pthread_mutex_init)(m, a);
   if (res == 0) {
-    bool recursive = false;
+    u32 flagz = 0;
     if (a) {
       int type = 0;
       if (REAL(pthread_mutexattr_gettype)(a, &type) == 0)
-        recursive = (type == PTHREAD_MUTEX_RECURSIVE
-            || type == PTHREAD_MUTEX_RECURSIVE_NP);
+        if (type == PTHREAD_MUTEX_RECURSIVE ||
+            type == PTHREAD_MUTEX_RECURSIVE_NP)
+          flagz |= MutexFlagWriteReentrant;
     }
-    MutexCreate(thr, pc, (uptr)m, false, recursive, false);
+    MutexCreate(thr, pc, (uptr)m, flagz);
   }
   return res;
 }
@@ -1131,7 +1121,7 @@
 TSAN_INTERCEPTOR(int, pthread_mutex_destroy, void *m) {
   SCOPED_TSAN_INTERCEPTOR(pthread_mutex_destroy, m);
   int res = REAL(pthread_mutex_destroy)(m);
-  if (res == 0 || res == EBUSY) {
+  if (res == 0 || res == errno_EBUSY) {
     MutexDestroy(thr, pc, (uptr)m);
   }
   return res;
@@ -1140,10 +1130,10 @@
 TSAN_INTERCEPTOR(int, pthread_mutex_trylock, void *m) {
   SCOPED_TSAN_INTERCEPTOR(pthread_mutex_trylock, m);
   int res = REAL(pthread_mutex_trylock)(m);
-  if (res == EOWNERDEAD)
+  if (res == errno_EOWNERDEAD)
     MutexRepair(thr, pc, (uptr)m);
-  if (res == 0 || res == EOWNERDEAD)
-    MutexLock(thr, pc, (uptr)m, /*rec=*/1, /*try_lock=*/true);
+  if (res == 0 || res == errno_EOWNERDEAD)
+    MutexPostLock(thr, pc, (uptr)m, MutexFlagTryLock);
   return res;
 }
 
@@ -1152,7 +1142,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_mutex_timedlock, m, abstime);
   int res = REAL(pthread_mutex_timedlock)(m, abstime);
   if (res == 0) {
-    MutexLock(thr, pc, (uptr)m);
+    MutexPostLock(thr, pc, (uptr)m, MutexFlagTryLock);
   }
   return res;
 }
@@ -1163,7 +1153,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_spin_init, m, pshared);
   int res = REAL(pthread_spin_init)(m, pshared);
   if (res == 0) {
-    MutexCreate(thr, pc, (uptr)m, false, false, false);
+    MutexCreate(thr, pc, (uptr)m);
   }
   return res;
 }
@@ -1179,9 +1169,10 @@
 
 TSAN_INTERCEPTOR(int, pthread_spin_lock, void *m) {
   SCOPED_TSAN_INTERCEPTOR(pthread_spin_lock, m);
+  MutexPreLock(thr, pc, (uptr)m);
   int res = REAL(pthread_spin_lock)(m);
   if (res == 0) {
-    MutexLock(thr, pc, (uptr)m);
+    MutexPostLock(thr, pc, (uptr)m);
   }
   return res;
 }
@@ -1190,7 +1181,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_spin_trylock, m);
   int res = REAL(pthread_spin_trylock)(m);
   if (res == 0) {
-    MutexLock(thr, pc, (uptr)m, /*rec=*/1, /*try_lock=*/true);
+    MutexPostLock(thr, pc, (uptr)m, MutexFlagTryLock);
   }
   return res;
 }
@@ -1207,7 +1198,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_init, m, a);
   int res = REAL(pthread_rwlock_init)(m, a);
   if (res == 0) {
-    MutexCreate(thr, pc, (uptr)m, true, false, false);
+    MutexCreate(thr, pc, (uptr)m);
   }
   return res;
 }
@@ -1223,9 +1214,10 @@
 
 TSAN_INTERCEPTOR(int, pthread_rwlock_rdlock, void *m) {
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_rdlock, m);
+  MutexPreReadLock(thr, pc, (uptr)m);
   int res = REAL(pthread_rwlock_rdlock)(m);
   if (res == 0) {
-    MutexReadLock(thr, pc, (uptr)m);
+    MutexPostReadLock(thr, pc, (uptr)m);
   }
   return res;
 }
@@ -1234,7 +1226,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_tryrdlock, m);
   int res = REAL(pthread_rwlock_tryrdlock)(m);
   if (res == 0) {
-    MutexReadLock(thr, pc, (uptr)m, /*try_lock=*/true);
+    MutexPostReadLock(thr, pc, (uptr)m, MutexFlagTryLock);
   }
   return res;
 }
@@ -1244,7 +1236,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_timedrdlock, m, abstime);
   int res = REAL(pthread_rwlock_timedrdlock)(m, abstime);
   if (res == 0) {
-    MutexReadLock(thr, pc, (uptr)m);
+    MutexPostReadLock(thr, pc, (uptr)m);
   }
   return res;
 }
@@ -1252,9 +1244,10 @@
 
 TSAN_INTERCEPTOR(int, pthread_rwlock_wrlock, void *m) {
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_wrlock, m);
+  MutexPreLock(thr, pc, (uptr)m);
   int res = REAL(pthread_rwlock_wrlock)(m);
   if (res == 0) {
-    MutexLock(thr, pc, (uptr)m);
+    MutexPostLock(thr, pc, (uptr)m);
   }
   return res;
 }
@@ -1263,7 +1256,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_trywrlock, m);
   int res = REAL(pthread_rwlock_trywrlock)(m);
   if (res == 0) {
-    MutexLock(thr, pc, (uptr)m, /*rec=*/1, /*try_lock=*/true);
+    MutexPostLock(thr, pc, (uptr)m, MutexFlagTryLock);
   }
   return res;
 }
@@ -1273,7 +1266,7 @@
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_timedwrlock, m, abstime);
   int res = REAL(pthread_rwlock_timedwrlock)(m, abstime);
   if (res == 0) {
-    MutexLock(thr, pc, (uptr)m);
+    MutexPostLock(thr, pc, (uptr)m, MutexFlagTryLock);
   }
   return res;
 }
@@ -1317,7 +1310,7 @@
 TSAN_INTERCEPTOR(int, pthread_once, void *o, void (*f)()) {
   SCOPED_INTERCEPTOR_RAW(pthread_once, o, f);
   if (o == 0 || f == 0)
-    return EINVAL;
+    return errno_EINVAL;
   atomic_uint32_t *a;
   if (!SANITIZER_MAC)
     a = static_cast<atomic_uint32_t*>(o);
@@ -1646,24 +1639,6 @@
 #define TSAN_MAYBE_INTERCEPT_TMPFILE64
 #endif
 
-TSAN_INTERCEPTOR(uptr, fread, void *ptr, uptr size, uptr nmemb, void *f) {
-  // libc file streams can call user-supplied functions, see fopencookie.
-  {
-    SCOPED_TSAN_INTERCEPTOR(fread, ptr, size, nmemb, f);
-    MemoryAccessRange(thr, pc, (uptr)ptr, size * nmemb, true);
-  }
-  return REAL(fread)(ptr, size, nmemb, f);
-}
-
-TSAN_INTERCEPTOR(uptr, fwrite, const void *p, uptr size, uptr nmemb, void *f) {
-  // libc file streams can call user-supplied functions, see fopencookie.
-  {
-    SCOPED_TSAN_INTERCEPTOR(fwrite, p, size, nmemb, f);
-    MemoryAccessRange(thr, pc, (uptr)p, size * nmemb, false);
-  }
-  return REAL(fwrite)(p, size, nmemb, f);
-}
-
 static void FlushStreams() {
   // Flushing all the streams here may freeze the process if a child thread is
   // performing file stream operations at the same time.
@@ -2253,8 +2228,12 @@
 #define COMMON_INTERCEPTOR_ON_EXIT(ctx) \
   OnExit(((TsanInterceptorContext *) ctx)->thr)
 
-#define COMMON_INTERCEPTOR_MUTEX_LOCK(ctx, m) \
-  MutexLock(((TsanInterceptorContext *)ctx)->thr, \
+#define COMMON_INTERCEPTOR_MUTEX_PRE_LOCK(ctx, m) \
+  MutexPreLock(((TsanInterceptorContext *)ctx)->thr, \
+            ((TsanInterceptorContext *)ctx)->pc, (uptr)m)
+
+#define COMMON_INTERCEPTOR_MUTEX_POST_LOCK(ctx, m) \
+  MutexPostLock(((TsanInterceptorContext *)ctx)->thr, \
             ((TsanInterceptorContext *)ctx)->pc, (uptr)m)
 
 #define COMMON_INTERCEPTOR_MUTEX_UNLOCK(ctx, m) \
diff --git a/lib/tsan/rtl/tsan_interceptors_mac.cc b/lib/tsan/rtl/tsan_interceptors_mac.cc
index f6bf8a0..4f10794 100644
--- a/lib/tsan/rtl/tsan_interceptors_mac.cc
+++ b/lib/tsan/rtl/tsan_interceptors_mac.cc
@@ -21,7 +21,10 @@
 #include "tsan_interface_ann.h"
 
 #include <libkern/OSAtomic.h>
+
+#if defined(__has_include) && __has_include(<xpc/xpc.h>)
 #include <xpc/xpc.h>
+#endif  // #if defined(__has_include) && __has_include(<xpc/xpc.h>)
 
 typedef long long_t;  // NOLINT
 
@@ -235,6 +238,8 @@
   REAL(os_lock_unlock)(lock);
 }
 
+#if defined(__has_include) && __has_include(<xpc/xpc.h>)
+
 TSAN_INTERCEPTOR(void, xpc_connection_set_event_handler,
                  xpc_connection_t connection, xpc_handler_t handler) {
   SCOPED_TSAN_INTERCEPTOR(xpc_connection_set_event_handler, connection,
@@ -287,6 +292,8 @@
   REAL(xpc_connection_cancel)(connection);
 }
 
+#endif  // #if defined(__has_include) && __has_include(<xpc/xpc.h>)
+
 // On macOS, libc++ is always linked dynamically, so intercepting works the
 // usual way.
 #define STDCXX_INTERCEPTOR TSAN_INTERCEPTOR
diff --git a/lib/tsan/rtl/tsan_interface.h b/lib/tsan/rtl/tsan_interface.h
index 496a871..a80a489 100644
--- a/lib/tsan/rtl/tsan_interface.h
+++ b/lib/tsan/rtl/tsan_interface.h
@@ -18,6 +18,7 @@
 
 #include <sanitizer_common/sanitizer_internal_defs.h>
 using __sanitizer::uptr;
+using __sanitizer::tid_t;
 
 // This header should NOT include any other headers.
 // All functions in this header are extern "C" and start with __tsan_.
@@ -81,6 +82,8 @@
 SANITIZER_INTERFACE_ATTRIBUTE
 void *__tsan_external_register_tag(const char *object_type);
 SANITIZER_INTERFACE_ATTRIBUTE
+void __tsan_external_register_header(void *tag, const char *header);
+SANITIZER_INTERFACE_ATTRIBUTE
 void __tsan_external_assign_tag(void *addr, void *tag);
 SANITIZER_INTERFACE_ATTRIBUTE
 void __tsan_external_read(void *addr, void *caller_pc, void *tag);
@@ -143,7 +146,7 @@
 
 // Returns information about threads included in the report.
 SANITIZER_INTERFACE_ATTRIBUTE
-int __tsan_get_report_thread(void *report, uptr idx, int *tid, uptr *os_id,
+int __tsan_get_report_thread(void *report, uptr idx, int *tid, tid_t *os_id,
                              int *running, const char **name, int *parent_tid,
                              void **trace, uptr trace_size);
 
@@ -160,7 +163,7 @@
 // Returns the allocation stack for a heap pointer.
 SANITIZER_INTERFACE_ATTRIBUTE
 int __tsan_get_alloc_stack(uptr addr, uptr *trace, uptr size, int *thread_id,
-                           uptr *os_id);
+                           tid_t *os_id);
 
 #endif  // SANITIZER_GO
 
diff --git a/lib/tsan/rtl/tsan_interface_ann.cc b/lib/tsan/rtl/tsan_interface_ann.cc
index 62db796..f68a046 100644
--- a/lib/tsan/rtl/tsan_interface_ann.cc
+++ b/lib/tsan/rtl/tsan_interface_ann.cc
@@ -31,11 +31,10 @@
 
 class ScopedAnnotation {
  public:
-  ScopedAnnotation(ThreadState *thr, const char *aname, const char *f, int l,
-                   uptr pc)
+  ScopedAnnotation(ThreadState *thr, const char *aname, uptr pc)
       : thr_(thr) {
     FuncEntry(thr_, pc);
-    DPrintf("#%d: annotation %s() %s:%d\n", thr_->tid, aname, f, l);
+    DPrintf("#%d: annotation %s()\n", thr_->tid, aname);
   }
 
   ~ScopedAnnotation() {
@@ -46,18 +45,20 @@
   ThreadState *const thr_;
 };
 
-#define SCOPED_ANNOTATION(typ) \
+#define SCOPED_ANNOTATION_RET(typ, ret) \
     if (!flags()->enable_annotations) \
-      return; \
+      return ret; \
     ThreadState *thr = cur_thread(); \
     const uptr caller_pc = (uptr)__builtin_return_address(0); \
     StatInc(thr, StatAnnotation); \
     StatInc(thr, Stat##typ); \
-    ScopedAnnotation sa(thr, __func__, f, l, caller_pc); \
+    ScopedAnnotation sa(thr, __func__, caller_pc); \
     const uptr pc = StackTrace::GetCurrentPc(); \
     (void)pc; \
 /**/
 
+#define SCOPED_ANNOTATION(typ) SCOPED_ANNOTATION_RET(typ, )
+
 static const int kMaxDescLen = 128;
 
 struct ExpectRace {
@@ -252,12 +253,12 @@
 
 void INTERFACE_ATTRIBUTE AnnotateRWLockCreate(char *f, int l, uptr m) {
   SCOPED_ANNOTATION(AnnotateRWLockCreate);
-  MutexCreate(thr, pc, m, true, true, false);
+  MutexCreate(thr, pc, m, MutexFlagWriteReentrant);
 }
 
 void INTERFACE_ATTRIBUTE AnnotateRWLockCreateStatic(char *f, int l, uptr m) {
   SCOPED_ANNOTATION(AnnotateRWLockCreateStatic);
-  MutexCreate(thr, pc, m, true, true, true);
+  MutexCreate(thr, pc, m, MutexFlagWriteReentrant | MutexFlagLinkerInit);
 }
 
 void INTERFACE_ATTRIBUTE AnnotateRWLockDestroy(char *f, int l, uptr m) {
@@ -269,9 +270,9 @@
                                                 uptr is_w) {
   SCOPED_ANNOTATION(AnnotateRWLockAcquired);
   if (is_w)
-    MutexLock(thr, pc, m);
+    MutexPostLock(thr, pc, m, MutexFlagDoPreLockOnPostLock);
   else
-    MutexReadLock(thr, pc, m);
+    MutexPostReadLock(thr, pc, m, MutexFlagDoPreLockOnPostLock);
 }
 
 void INTERFACE_ATTRIBUTE AnnotateRWLockReleased(char *f, int l, uptr m,
@@ -458,4 +459,95 @@
 AnnotateMemoryIsInitialized(char *f, int l, uptr mem, uptr sz) {}
 void INTERFACE_ATTRIBUTE
 AnnotateMemoryIsUninitialized(char *f, int l, uptr mem, uptr sz) {}
+
+// Note: the parameter is called flagz, because flags is already taken
+// by the global function that returns flags.
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_create(void *m, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_create);
+  MutexCreate(thr, pc, (uptr)m, flagz & MutexCreationFlagMask);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_destroy(void *m, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_destroy);
+  MutexDestroy(thr, pc, (uptr)m, flagz);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_pre_lock(void *m, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_pre_lock);
+  if (!(flagz & MutexFlagTryLock)) {
+    if (flagz & MutexFlagReadLock)
+      MutexPreReadLock(thr, pc, (uptr)m);
+    else
+      MutexPreLock(thr, pc, (uptr)m);
+  }
+  ThreadIgnoreBegin(thr, pc, /*save_stack=*/false);
+  ThreadIgnoreSyncBegin(thr, pc, /*save_stack=*/false);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_post_lock(void *m, unsigned flagz, int rec) {
+  SCOPED_ANNOTATION(__tsan_mutex_post_lock);
+  ThreadIgnoreSyncEnd(thr, pc);
+  ThreadIgnoreEnd(thr, pc);
+  if (!(flagz & MutexFlagTryLockFailed)) {
+    if (flagz & MutexFlagReadLock)
+      MutexPostReadLock(thr, pc, (uptr)m, flagz);
+    else
+      MutexPostLock(thr, pc, (uptr)m, flagz, rec);
+  }
+}
+
+INTERFACE_ATTRIBUTE
+int __tsan_mutex_pre_unlock(void *m, unsigned flagz) {
+  SCOPED_ANNOTATION_RET(__tsan_mutex_pre_unlock, 0);
+  int ret = 0;
+  if (flagz & MutexFlagReadLock) {
+    CHECK(!(flagz & MutexFlagRecursiveUnlock));
+    MutexReadUnlock(thr, pc, (uptr)m);
+  } else {
+    ret = MutexUnlock(thr, pc, (uptr)m, flagz);
+  }
+  ThreadIgnoreBegin(thr, pc, /*save_stack=*/false);
+  ThreadIgnoreSyncBegin(thr, pc, /*save_stack=*/false);
+  return ret;
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_post_unlock(void *m, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_post_unlock);
+  ThreadIgnoreSyncEnd(thr, pc);
+  ThreadIgnoreEnd(thr, pc);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_pre_signal(void *addr, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_pre_signal);
+  ThreadIgnoreBegin(thr, pc, /*save_stack=*/false);
+  ThreadIgnoreSyncBegin(thr, pc, /*save_stack=*/false);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_post_signal(void *addr, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_post_signal);
+  ThreadIgnoreSyncEnd(thr, pc);
+  ThreadIgnoreEnd(thr, pc);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_pre_divert(void *addr, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_pre_divert);
+  // Exit from ignore region started in __tsan_mutex_pre_lock/unlock/signal.
+  ThreadIgnoreSyncEnd(thr, pc);
+  ThreadIgnoreEnd(thr, pc);
+}
+
+INTERFACE_ATTRIBUTE
+void __tsan_mutex_post_divert(void *addr, unsigned flagz) {
+  SCOPED_ANNOTATION(__tsan_mutex_post_divert);
+  ThreadIgnoreBegin(thr, pc, /*save_stack=*/false);
+  ThreadIgnoreSyncBegin(thr, pc, /*save_stack=*/false);
+}
 }  // extern "C"
diff --git a/lib/tsan/rtl/tsan_interface_atomic.cc b/lib/tsan/rtl/tsan_interface_atomic.cc
index 5238b66..d334394 100644
--- a/lib/tsan/rtl/tsan_interface_atomic.cc
+++ b/lib/tsan/rtl/tsan_interface_atomic.cc
@@ -220,8 +220,7 @@
 #endif
 
 template<typename T>
-static T AtomicLoad(ThreadState *thr, uptr pc, const volatile T *a,
-    morder mo) {
+static T AtomicLoad(ThreadState *thr, uptr pc, const volatile T *a, morder mo) {
   CHECK(IsLoadOrder(mo));
   // This fast-path is critical for performance.
   // Assume the access is atomic.
@@ -229,10 +228,17 @@
     MemoryReadAtomic(thr, pc, (uptr)a, SizeLog<T>());
     return NoTsanAtomicLoad(a, mo);
   }
-  SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, (uptr)a, false);
-  AcquireImpl(thr, pc, &s->clock);
+  // Don't create sync object if it does not exist yet. For example, an atomic
+  // pointer is initialized to nullptr and then periodically acquire-loaded.
   T v = NoTsanAtomicLoad(a, mo);
-  s->mtx.ReadUnlock();
+  SyncVar *s = ctx->metamap.GetIfExistsAndLock((uptr)a, false);
+  if (s) {
+    AcquireImpl(thr, pc, &s->clock);
+    // Re-read under sync mutex because we need a consistent snapshot
+    // of the value and the clock we acquire.
+    v = NoTsanAtomicLoad(a, mo);
+    s->mtx.ReadUnlock();
+  }
   MemoryReadAtomic(thr, pc, (uptr)a, SizeLog<T>());
   return v;
 }
@@ -450,13 +456,32 @@
 
 // C/C++
 
+static morder convert_morder(morder mo) {
+  if (flags()->force_seq_cst_atomics)
+    return (morder)mo_seq_cst;
+
+  // Filter out additional memory order flags:
+  // MEMMODEL_SYNC        = 1 << 15
+  // __ATOMIC_HLE_ACQUIRE = 1 << 16
+  // __ATOMIC_HLE_RELEASE = 1 << 17
+  //
+  // HLE is an optimization, and we pretend that elision always fails.
+  // MEMMODEL_SYNC is used when lowering __sync_ atomics,
+  // since we use __sync_ atomics for actual atomic operations,
+  // we can safely ignore it as well. It also subtly affects semantics,
+  // but we don't model the difference.
+  return (morder)(mo & 0x7fff);
+}
+
 #define SCOPED_ATOMIC(func, ...) \
+    ThreadState *const thr = cur_thread(); \
+    if (thr->ignore_sync || thr->ignore_interceptors) { \
+      ProcessPendingSignals(thr); \
+      return NoTsanAtomic##func(__VA_ARGS__); \
+    } \
     const uptr callpc = (uptr)__builtin_return_address(0); \
     uptr pc = StackTrace::GetCurrentPc(); \
-    mo = flags()->force_seq_cst_atomics ? (morder)mo_seq_cst : mo; \
-    ThreadState *const thr = cur_thread(); \
-    if (thr->ignore_interceptors) \
-      return NoTsanAtomic##func(__VA_ARGS__); \
+    mo = convert_morder(mo); \
     AtomicStatInc(thr, sizeof(*a), mo, StatAtomic##func); \
     ScopedAtomic sa(thr, callpc, a, mo, __func__); \
     return Atomic##func(thr, pc, __VA_ARGS__); \
diff --git a/lib/tsan/rtl/tsan_interface_java.cc b/lib/tsan/rtl/tsan_interface_java.cc
index 5bdc04f..75e960e 100644
--- a/lib/tsan/rtl/tsan_interface_java.cc
+++ b/lib/tsan/rtl/tsan_interface_java.cc
@@ -180,8 +180,8 @@
   CHECK_GE(addr, jctx->heap_begin);
   CHECK_LT(addr, jctx->heap_begin + jctx->heap_size);
 
-  MutexCreate(thr, pc, addr, true, true, true);
-  MutexLock(thr, pc, addr);
+  MutexPostLock(thr, pc, addr, MutexFlagLinkerInit | MutexFlagWriteReentrant |
+      MutexFlagDoPreLockOnPostLock);
 }
 
 void __tsan_java_mutex_unlock(jptr addr) {
@@ -201,8 +201,8 @@
   CHECK_GE(addr, jctx->heap_begin);
   CHECK_LT(addr, jctx->heap_begin + jctx->heap_size);
 
-  MutexCreate(thr, pc, addr, true, true, true);
-  MutexReadLock(thr, pc, addr);
+  MutexPostReadLock(thr, pc, addr, MutexFlagLinkerInit |
+      MutexFlagWriteReentrant | MutexFlagDoPreLockOnPostLock);
 }
 
 void __tsan_java_mutex_read_unlock(jptr addr) {
@@ -223,8 +223,8 @@
   CHECK_LT(addr, jctx->heap_begin + jctx->heap_size);
   CHECK_GT(rec, 0);
 
-  MutexCreate(thr, pc, addr, true, true, true);
-  MutexLock(thr, pc, addr, rec);
+  MutexPostLock(thr, pc, addr, MutexFlagLinkerInit | MutexFlagWriteReentrant |
+      MutexFlagDoPreLockOnPostLock | MutexFlagRecursiveLock, rec);
 }
 
 int __tsan_java_mutex_unlock_rec(jptr addr) {
@@ -234,7 +234,7 @@
   CHECK_GE(addr, jctx->heap_begin);
   CHECK_LT(addr, jctx->heap_begin + jctx->heap_size);
 
-  return MutexUnlock(thr, pc, addr, true);
+  return MutexUnlock(thr, pc, addr, MutexFlagRecursiveUnlock);
 }
 
 void __tsan_java_acquire(jptr addr) {
diff --git a/lib/tsan/rtl/tsan_mman.cc b/lib/tsan/rtl/tsan_mman.cc
index 2dea249..f79dccd 100644
--- a/lib/tsan/rtl/tsan_mman.cc
+++ b/lib/tsan/rtl/tsan_mman.cc
@@ -10,6 +10,7 @@
 // This file is a part of ThreadSanitizer (TSan), a race detector.
 //
 //===----------------------------------------------------------------------===//
+#include "sanitizer_common/sanitizer_allocator_checks.h"
 #include "sanitizer_common/sanitizer_allocator_interface.h"
 #include "sanitizer_common/sanitizer_common.h"
 #include "sanitizer_common/sanitizer_placement_new.h"
@@ -112,9 +113,8 @@
 }
 
 void InitializeAllocator() {
-  allocator()->Init(
-      common_flags()->allocator_may_return_null,
-      common_flags()->allocator_release_to_os_interval_ms);
+  SetAllocatorMayReturnNull(common_flags()->allocator_may_return_null);
+  allocator()->Init(common_flags()->allocator_release_to_os_interval_ms);
 }
 
 void InitializeAllocatorLate() {
@@ -151,7 +151,7 @@
 
 void *user_alloc(ThreadState *thr, uptr pc, uptr sz, uptr align, bool signal) {
   if ((sz >= (1ull << 40)) || (align >= (1ull << 40)))
-    return allocator()->ReturnNullOrDieOnBadRequest();
+    return Allocator::FailureHandler::OnBadRequest();
   void *p = allocator()->Allocate(&thr->proc()->alloc_cache, sz, align);
   if (p == 0)
     return 0;
@@ -163,8 +163,8 @@
 }
 
 void *user_calloc(ThreadState *thr, uptr pc, uptr size, uptr n) {
-  if (CallocShouldReturnNullDueToOverflow(size, n))
-    return allocator()->ReturnNullOrDieOnBadRequest();
+  if (CheckForCallocOverflow(size, n))
+    return Allocator::FailureHandler::OnBadRequest();
   void *p = user_alloc(thr, pc, n * size);
   if (p)
     internal_memset(p, 0, n * size);
@@ -295,6 +295,8 @@
 
 void __tsan_on_thread_idle() {
   ThreadState *thr = cur_thread();
+  thr->clock.ResetCached(&thr->proc()->clock_cache);
+  thr->last_sleep_clock.ResetCached(&thr->proc()->clock_cache);
   allocator()->SwallowCache(&thr->proc()->alloc_cache);
   internal_allocator()->SwallowCache(&thr->proc()->internal_alloc_cache);
   ctx->metamap.OnProcIdle(thr->proc());
diff --git a/lib/tsan/rtl/tsan_new_delete.cc b/lib/tsan/rtl/tsan_new_delete.cc
index b6478bb..4d03145 100644
--- a/lib/tsan/rtl/tsan_new_delete.cc
+++ b/lib/tsan/rtl/tsan_new_delete.cc
@@ -12,6 +12,7 @@
 // Interceptors for operators new and delete.
 //===----------------------------------------------------------------------===//
 #include "interception/interception.h"
+#include "sanitizer_common/sanitizer_allocator.h"
 #include "sanitizer_common/sanitizer_internal_defs.h"
 #include "tsan_interceptors.h"
 
@@ -24,13 +25,15 @@
 DECLARE_REAL(void *, malloc, uptr size)
 DECLARE_REAL(void, free, void *ptr)
 
-#define OPERATOR_NEW_BODY(mangled_name) \
+// TODO(alekseys): throw std::bad_alloc instead of dying on OOM.
+#define OPERATOR_NEW_BODY(mangled_name, nothrow) \
   if (cur_thread()->in_symbolizer) \
     return InternalAlloc(size); \
   void *p = 0; \
   {  \
     SCOPED_INTERCEPTOR_RAW(mangled_name, size); \
     p = user_alloc(thr, pc, size); \
+    if (!nothrow && UNLIKELY(!p)) DieOnFailure::OnOOM(); \
   }  \
   invoke_malloc_hook(p, size);  \
   return p;
@@ -38,25 +41,25 @@
 SANITIZER_INTERFACE_ATTRIBUTE
 void *operator new(__sanitizer::uptr size);
 void *operator new(__sanitizer::uptr size) {
-  OPERATOR_NEW_BODY(_Znwm);
+  OPERATOR_NEW_BODY(_Znwm, false /*nothrow*/);
 }
 
 SANITIZER_INTERFACE_ATTRIBUTE
 void *operator new[](__sanitizer::uptr size);
 void *operator new[](__sanitizer::uptr size) {
-  OPERATOR_NEW_BODY(_Znam);
+  OPERATOR_NEW_BODY(_Znam, false /*nothrow*/);
 }
 
 SANITIZER_INTERFACE_ATTRIBUTE
 void *operator new(__sanitizer::uptr size, std::nothrow_t const&);
 void *operator new(__sanitizer::uptr size, std::nothrow_t const&) {
-  OPERATOR_NEW_BODY(_ZnwmRKSt9nothrow_t);
+  OPERATOR_NEW_BODY(_ZnwmRKSt9nothrow_t, true /*nothrow*/);
 }
 
 SANITIZER_INTERFACE_ATTRIBUTE
 void *operator new[](__sanitizer::uptr size, std::nothrow_t const&);
 void *operator new[](__sanitizer::uptr size, std::nothrow_t const&) {
-  OPERATOR_NEW_BODY(_ZnamRKSt9nothrow_t);
+  OPERATOR_NEW_BODY(_ZnamRKSt9nothrow_t, true /*nothrow*/);
 }
 
 #define OPERATOR_DELETE_BODY(mangled_name) \
diff --git a/lib/tsan/rtl/tsan_platform.h b/lib/tsan/rtl/tsan_platform.h
index 1dd9d91..bea1dab 100644
--- a/lib/tsan/rtl/tsan_platform.h
+++ b/lib/tsan/rtl/tsan_platform.h
@@ -100,6 +100,37 @@
 };
 
 #define TSAN_MID_APP_RANGE 1
+#elif defined(__aarch64__) && defined(__APPLE__)
+/*
+C/C++ on Darwin/iOS/ARM64 (36-bit VMA, 64 GB VM)
+0000 0000 00 - 0100 0000 00: -                                    (4 GB)
+0100 0000 00 - 0200 0000 00: main binary, modules, thread stacks  (4 GB)
+0200 0000 00 - 0300 0000 00: heap                                 (4 GB)
+0300 0000 00 - 0400 0000 00: -                                    (4 GB)
+0400 0000 00 - 0c00 0000 00: shadow memory                       (32 GB)
+0c00 0000 00 - 0d00 0000 00: -                                    (4 GB)
+0d00 0000 00 - 0e00 0000 00: metainfo                             (4 GB)
+0e00 0000 00 - 0f00 0000 00: -                                    (4 GB)
+0f00 0000 00 - 1000 0000 00: traces                               (4 GB)
+*/
+struct Mapping {
+  static const uptr kLoAppMemBeg   = 0x0100000000ull;
+  static const uptr kLoAppMemEnd   = 0x0200000000ull;
+  static const uptr kHeapMemBeg    = 0x0200000000ull;
+  static const uptr kHeapMemEnd    = 0x0300000000ull;
+  static const uptr kShadowBeg     = 0x0400000000ull;
+  static const uptr kShadowEnd     = 0x0c00000000ull;
+  static const uptr kMetaShadowBeg = 0x0d00000000ull;
+  static const uptr kMetaShadowEnd = 0x0e00000000ull;
+  static const uptr kTraceMemBeg   = 0x0f00000000ull;
+  static const uptr kTraceMemEnd   = 0x1000000000ull;
+  static const uptr kHiAppMemBeg   = 0x1000000000ull;
+  static const uptr kHiAppMemEnd   = 0x1000000000ull;
+  static const uptr kAppMemMsk     =          0x0ull;
+  static const uptr kAppMemXor     =          0x0ull;
+  static const uptr kVdsoBeg       = 0x7000000000000000ull;
+};
+
 #elif defined(__aarch64__)
 // AArch64 supports multiple VMA which leads to multiple address transformation
 // functions.  To support these multiple VMAS transformations and mappings TSAN
@@ -389,7 +420,7 @@
 
 template<int Type>
 uptr MappingArchImpl(void) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return MappingImpl<Mapping39, Type>();
     case 42: return MappingImpl<Mapping42, Type>();
@@ -542,7 +573,7 @@
 
 ALWAYS_INLINE
 bool IsAppMem(uptr mem) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return IsAppMemImpl<Mapping39>(mem);
     case 42: return IsAppMemImpl<Mapping42>(mem);
@@ -569,7 +600,7 @@
 
 ALWAYS_INLINE
 bool IsShadowMem(uptr mem) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return IsShadowMemImpl<Mapping39>(mem);
     case 42: return IsShadowMemImpl<Mapping42>(mem);
@@ -596,7 +627,7 @@
 
 ALWAYS_INLINE
 bool IsMetaMem(uptr mem) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return IsMetaMemImpl<Mapping39>(mem);
     case 42: return IsMetaMemImpl<Mapping42>(mem);
@@ -633,7 +664,7 @@
 
 ALWAYS_INLINE
 uptr MemToShadow(uptr x) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return MemToShadowImpl<Mapping39>(x);
     case 42: return MemToShadowImpl<Mapping42>(x);
@@ -672,7 +703,7 @@
 
 ALWAYS_INLINE
 u32 *MemToMeta(uptr x) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return MemToMetaImpl<Mapping39>(x);
     case 42: return MemToMetaImpl<Mapping42>(x);
@@ -724,7 +755,7 @@
 
 ALWAYS_INLINE
 uptr ShadowToMem(uptr s) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return ShadowToMemImpl<Mapping39>(s);
     case 42: return ShadowToMemImpl<Mapping42>(s);
@@ -759,7 +790,7 @@
 
 ALWAYS_INLINE
 uptr GetThreadTrace(int tid) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return GetThreadTraceImpl<Mapping39>(tid);
     case 42: return GetThreadTraceImpl<Mapping42>(tid);
@@ -789,7 +820,7 @@
 
 ALWAYS_INLINE
 uptr GetThreadTraceHeader(int tid) {
-#ifdef __aarch64__
+#if defined(__aarch64__) && !defined(__APPLE__)
   switch (vmaSize) {
     case 39: return GetThreadTraceHeaderImpl<Mapping39>(tid);
     case 42: return GetThreadTraceHeaderImpl<Mapping42>(tid);
@@ -816,6 +847,7 @@
 void WriteMemoryProfile(char *buf, uptr buf_size, uptr nthread, uptr nlive);
 int ExtractResolvFDs(void *state, int *fds, int nfd);
 int ExtractRecvmsgFDs(void *msg, int *fds, int nfd);
+void ImitateTlsWrite(ThreadState *thr, uptr tls_addr, uptr tls_size);
 
 int call_pthread_cancel_with_cleanup(int(*fn)(void *c, void *m,
     void *abstime), void *c, void *m, void *abstime,
diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc
index 3313288..ead1e57 100644
--- a/lib/tsan/rtl/tsan_platform_linux.cc
+++ b/lib/tsan/rtl/tsan_platform_linux.cc
@@ -47,7 +47,6 @@
 #include <sys/resource.h>
 #include <sys/stat.h>
 #include <unistd.h>
-#include <errno.h>
 #include <sched.h>
 #include <dlfcn.h>
 #if SANITIZER_LINUX
@@ -182,17 +181,15 @@
   }
   // Map the file into shadow of .rodata sections.
   MemoryMappingLayout proc_maps(/*cache_enabled*/true);
-  uptr start, end, offset, prot;
   // Reusing the buffer 'name'.
-  while (proc_maps.Next(&start, &end, &offset, name, ARRAY_SIZE(name), &prot)) {
-    if (name[0] != 0 && name[0] != '['
-        && (prot & MemoryMappingLayout::kProtectionRead)
-        && (prot & MemoryMappingLayout::kProtectionExecute)
-        && !(prot & MemoryMappingLayout::kProtectionWrite)
-        && IsAppMem(start)) {
+  MemoryMappedSegment segment(name, ARRAY_SIZE(name));
+  while (proc_maps.Next(&segment)) {
+    if (segment.filename[0] != 0 && segment.filename[0] != '[' &&
+        segment.IsReadable() && segment.IsExecutable() &&
+        !segment.IsWritable() && IsAppMem(segment.start)) {
       // Assume it's .rodata
-      char *shadow_start = (char*)MemToShadow(start);
-      char *shadow_end = (char*)MemToShadow(end);
+      char *shadow_start = (char *)MemToShadow(segment.start);
+      char *shadow_end = (char *)MemToShadow(segment.end);
       for (char *p = shadow_start; p < shadow_end; p += marker.size()) {
         internal_mmap(p, Min<uptr>(marker.size(), shadow_end - p),
                       PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, 0);
@@ -289,7 +286,7 @@
 int ExtractResolvFDs(void *state, int *fds, int nfd) {
 #if SANITIZER_LINUX && !SANITIZER_ANDROID
   int cnt = 0;
-  __res_state *statp = (__res_state*)state;
+  struct __res_state *statp = (struct __res_state*)state;
   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
       fds[cnt++] = statp->_u._ext.nssocks[i];
@@ -320,6 +317,20 @@
   return res;
 }
 
+void ImitateTlsWrite(ThreadState *thr, uptr tls_addr, uptr tls_size) {
+  // Check that the thr object is in tls;
+  const uptr thr_beg = (uptr)thr;
+  const uptr thr_end = (uptr)thr + sizeof(*thr);
+  CHECK_GE(thr_beg, tls_addr);
+  CHECK_LE(thr_beg, tls_addr + tls_size);
+  CHECK_GE(thr_end, tls_addr);
+  CHECK_LE(thr_end, tls_addr + tls_size);
+  // Since the thr object is huge, skip it.
+  MemoryRangeImitateWrite(thr, /*pc=*/2, tls_addr, thr_beg - tls_addr);
+  MemoryRangeImitateWrite(thr, /*pc=*/2, thr_end,
+                          tls_addr + tls_size - thr_end);
+}
+
 // Note: this function runs with async signals enabled,
 // so it must not touch any tsan state.
 int call_pthread_cancel_with_cleanup(int(*fn)(void *c, void *m,
@@ -341,36 +352,22 @@
 
 #if !SANITIZER_GO
 #if SANITIZER_ANDROID
-
-#if defined(__aarch64__)
-# define __get_tls() \
-    ({ void** __val; __asm__("mrs %0, tpidr_el0" : "=r"(__val)); __val; })
-#elif defined(__x86_64__)
-# define __get_tls() \
-    ({ void** __val; __asm__("mov %%fs:0, %0" : "=r"(__val)); __val; })
-#else
-#error unsupported architecture
-#endif
-
-// On Android, __thread is not supported. So we store the pointer to ThreadState
-// in TLS_SLOT_TSAN, which is the tls slot allocated by Android bionic for tsan.
-static const int TLS_SLOT_TSAN = 8;
 // On Android, one thread can call intercepted functions after
 // DestroyThreadState(), so add a fake thread state for "dead" threads.
 static ThreadState *dead_thread_state = nullptr;
 
 ThreadState *cur_thread() {
-  ThreadState* thr = (ThreadState*)__get_tls()[TLS_SLOT_TSAN];
+  ThreadState* thr = reinterpret_cast<ThreadState*>(*get_android_tls_ptr());
   if (thr == nullptr) {
     __sanitizer_sigset_t emptyset;
     internal_sigfillset(&emptyset);
     __sanitizer_sigset_t oldset;
     CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, &emptyset, &oldset));
-    thr = reinterpret_cast<ThreadState*>(__get_tls()[TLS_SLOT_TSAN]);
+    thr = reinterpret_cast<ThreadState*>(*get_android_tls_ptr());
     if (thr == nullptr) {
       thr = reinterpret_cast<ThreadState*>(MmapOrDie(sizeof(ThreadState),
                                                      "ThreadState"));
-      __get_tls()[TLS_SLOT_TSAN] = thr;
+      *get_android_tls_ptr() = reinterpret_cast<uptr>(thr);
       if (dead_thread_state == nullptr) {
         dead_thread_state = reinterpret_cast<ThreadState*>(
             MmapOrDie(sizeof(ThreadState), "ThreadState"));
@@ -392,9 +389,9 @@
   internal_sigfillset(&emptyset);
   __sanitizer_sigset_t oldset;
   CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, &emptyset, &oldset));
-  ThreadState* thr = (ThreadState*)__get_tls()[TLS_SLOT_TSAN];
+  ThreadState* thr = reinterpret_cast<ThreadState*>(*get_android_tls_ptr());
   if (thr != dead_thread_state) {
-    __get_tls()[TLS_SLOT_TSAN] = dead_thread_state;
+    *get_android_tls_ptr() = reinterpret_cast<uptr>(dead_thread_state);
     UnmapOrDie(thr, sizeof(ThreadState));
   }
   CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, &oldset, nullptr));
diff --git a/lib/tsan/rtl/tsan_platform_mac.cc b/lib/tsan/rtl/tsan_platform_mac.cc
index b8d3d55..73a656f 100644
--- a/lib/tsan/rtl/tsan_platform_mac.cc
+++ b/lib/tsan/rtl/tsan_platform_mac.cc
@@ -75,12 +75,18 @@
 static uptr main_thread_identity = 0;
 ALIGNED(64) static char main_thread_state[sizeof(ThreadState)];
 
+ThreadState **cur_thread_location() {
+  ThreadState **thread_identity = (ThreadState **)pthread_self();
+  return ((uptr)thread_identity == main_thread_identity) ? nullptr
+                                                         : thread_identity;
+}
+
 ThreadState *cur_thread() {
-  uptr thread_identity = (uptr)pthread_self();
-  if (thread_identity == main_thread_identity || main_thread_identity == 0) {
+  ThreadState **thr_state_loc = cur_thread_location();
+  if (thr_state_loc == nullptr || main_thread_identity == 0) {
     return (ThreadState *)&main_thread_state;
   }
-  ThreadState **fake_tls = (ThreadState **)MemToShadow(thread_identity);
+  ThreadState **fake_tls = (ThreadState **)MemToShadow((uptr)thr_state_loc);
   ThreadState *thr = (ThreadState *)SignalSafeGetOrAllocate(
       (uptr *)fake_tls, sizeof(ThreadState));
   return thr;
@@ -90,13 +96,13 @@
 // munmap first and then clear `fake_tls`; if we receive a signal in between,
 // handler will try to access the unmapped ThreadState.
 void cur_thread_finalize() {
-  uptr thread_identity = (uptr)pthread_self();
-  if (thread_identity == main_thread_identity) {
+  ThreadState **thr_state_loc = cur_thread_location();
+  if (thr_state_loc == nullptr) {
     // Calling dispatch_main() or xpc_main() actually invokes pthread_exit to
     // exit the main thread. Let's keep the main thread's ThreadState.
     return;
   }
-  ThreadState **fake_tls = (ThreadState **)MemToShadow(thread_identity);
+  ThreadState **fake_tls = (ThreadState **)MemToShadow((uptr)thr_state_loc);
   internal_munmap(*fake_tls, sizeof(ThreadState));
   *fake_tls = nullptr;
 }
@@ -224,6 +230,14 @@
 #endif
 
 void InitializePlatformEarly() {
+#if defined(__aarch64__)
+  uptr max_vm = GetMaxVirtualAddress() + 1;
+  if (max_vm != Mapping::kHiAppMemEnd) {
+    Printf("ThreadSanitizer: unsupported vm address limit %p, expected %p.\n",
+           max_vm, Mapping::kHiAppMemEnd);
+    Die();
+  }
+#endif
 }
 
 void InitializePlatform() {
@@ -240,6 +254,29 @@
 }
 
 #if !SANITIZER_GO
+void ImitateTlsWrite(ThreadState *thr, uptr tls_addr, uptr tls_size) {
+  // The pointer to the ThreadState object is stored in the shadow memory
+  // of the tls.
+  uptr tls_end = tls_addr + tls_size;
+  ThreadState **thr_state_loc = cur_thread_location();
+  if (thr_state_loc == nullptr) {
+    MemoryRangeImitateWrite(thr, /*pc=*/2, tls_addr, tls_size);
+  } else {
+    uptr thr_state_start = (uptr)thr_state_loc;
+    uptr thr_state_end = thr_state_start + sizeof(uptr);
+    CHECK_GE(thr_state_start, tls_addr);
+    CHECK_LE(thr_state_start, tls_addr + tls_size);
+    CHECK_GE(thr_state_end, tls_addr);
+    CHECK_LE(thr_state_end, tls_addr + tls_size);
+    MemoryRangeImitateWrite(thr, /*pc=*/2, tls_addr,
+                            thr_state_start - tls_addr);
+    MemoryRangeImitateWrite(thr, /*pc=*/2, thr_state_end,
+                            tls_end - thr_state_end);
+  }
+}
+#endif
+
+#if !SANITIZER_GO
 // Note: this function runs with async signals enabled,
 // so it must not touch any tsan state.
 int call_pthread_cancel_with_cleanup(int(*fn)(void *c, void *m,
diff --git a/lib/tsan/rtl/tsan_platform_posix.cc b/lib/tsan/rtl/tsan_platform_posix.cc
index 0732c83..e4f90a8 100644
--- a/lib/tsan/rtl/tsan_platform_posix.cc
+++ b/lib/tsan/rtl/tsan_platform_posix.cc
@@ -46,6 +46,9 @@
 #elif defined(__mips64)
   const uptr kMadviseRangeBeg  = 0xff00000000ull;
   const uptr kMadviseRangeSize = 0x0100000000ull;
+#elif defined(__aarch64__) && defined(__APPLE__)
+  uptr kMadviseRangeBeg = LoAppMemBeg();
+  uptr kMadviseRangeSize = LoAppMemEnd() - LoAppMemBeg();
 #elif defined(__aarch64__)
   uptr kMadviseRangeBeg = 0;
   uptr kMadviseRangeSize = 0;
@@ -115,21 +118,24 @@
 void CheckAndProtect() {
   // Ensure that the binary is indeed compiled with -pie.
   MemoryMappingLayout proc_maps(true);
-  uptr p, end, prot;
-  while (proc_maps.Next(&p, &end, 0, 0, 0, &prot)) {
-    if (IsAppMem(p))
+  MemoryMappedSegment segment;
+  while (proc_maps.Next(&segment)) {
+    if (IsAppMem(segment.start)) continue;
+    if (segment.start >= HeapMemEnd() && segment.start < HeapEnd()) continue;
+    if (segment.protection == 0)  // Zero page or mprotected.
       continue;
-    if (p >= HeapMemEnd() &&
-        p < HeapEnd())
-      continue;
-    if (prot == 0)  // Zero page or mprotected.
-      continue;
-    if (p >= VdsoBeg())  // vdso
+    if (segment.start >= VdsoBeg())  // vdso
       break;
-    Printf("FATAL: ThreadSanitizer: unexpected memory mapping %p-%p\n", p, end);
+    Printf("FATAL: ThreadSanitizer: unexpected memory mapping %p-%p\n",
+           segment.start, segment.end);
     Die();
   }
 
+#if defined(__aarch64__) && defined(__APPLE__)
+  ProtectRange(HeapMemEnd(), ShadowBeg());
+  ProtectRange(ShadowEnd(), MetaShadowBeg());
+  ProtectRange(MetaShadowEnd(), TraceMemBeg());
+#else
   ProtectRange(LoAppMemEnd(), ShadowBeg());
   ProtectRange(ShadowEnd(), MetaShadowBeg());
 #ifdef TSAN_MID_APP_RANGE
@@ -143,6 +149,7 @@
   ProtectRange(TraceMemBeg(), TraceMemEnd());
   ProtectRange(TraceMemEnd(), HeapMemBeg());
   ProtectRange(HeapEnd(), HiAppMemBeg());
+#endif
 }
 #endif
 
diff --git a/lib/tsan/rtl/tsan_report.cc b/lib/tsan/rtl/tsan_report.cc
index 1304651..32cc332 100644
--- a/lib/tsan/rtl/tsan_report.cc
+++ b/lib/tsan/rtl/tsan_report.cc
@@ -19,8 +19,7 @@
 
 namespace __tsan {
 
-ReportStack::ReportStack()
-    : frames(nullptr), suppressable(false), responsible_frame(0) {}
+ReportStack::ReportStack() : frames(nullptr), suppressable(false) {}
 
 ReportStack *ReportStack::New() {
   void *mem = internal_alloc(MBlockReportStack, sizeof(ReportStack));
@@ -54,7 +53,8 @@
 };
 
 ReportDesc::ReportDesc()
-    : stacks(MBlockReportStack)
+    : tag(kExternalTagNone)
+    , stacks(MBlockReportStack)
     , mops(MBlockReportMop)
     , locs(MBlockReportLoc)
     , mutexes(MBlockReportMutex)
@@ -82,7 +82,7 @@
   return buf;
 }
 
-static const char *ReportTypeString(ReportType typ) {
+static const char *ReportTypeString(ReportType typ, uptr tag) {
   if (typ == ReportTypeRace)
     return "data race";
   if (typ == ReportTypeVptrRace)
@@ -91,10 +91,10 @@
     return "heap-use-after-free";
   if (typ == ReportTypeVptrUseAfterFree)
     return "heap-use-after-free (virtual call vs free)";
-  if (typ == ReportTypeExternalRace)
-    return "race on a library object";
-  if (typ == ReportTypeSwiftAccessRace)
-    return "Swift access race";
+  if (typ == ReportTypeExternalRace) {
+    const char *str = GetReportHeaderFromTag(tag);
+    return str ? str : "race on external object";
+  }
   if (typ == ReportTypeThreadLeak)
     return "thread leak";
   if (typ == ReportTypeMutexDestroyLocked)
@@ -124,7 +124,7 @@
 static const char *const kInterposedFunctionPrefix = "__interceptor_";
 #endif
 
-void PrintStack(const ReportStack *ent, bool mark_frames) {
+void PrintStack(const ReportStack *ent) {
   if (ent == 0 || ent->frames == 0) {
     Printf("    [failed to restore the stack]\n\n");
     return;
@@ -135,9 +135,7 @@
     RenderFrame(&res, common_flags()->stack_trace_format, i, frame->info,
                 common_flags()->symbolize_vs_style,
                 common_flags()->strip_path_prefix, kInterposedFunctionPrefix);
-    const char *star_or_space =
-        (mark_frames && frame == ent->responsible_frame) ? "*" : " ";
-    Printf("  %s %s\n", star_or_space, res.data());
+    Printf("%s\n", res.data());
   }
   Printf("\n");
 }
@@ -160,36 +158,30 @@
 }
 
 static const char *ExternalMopDesc(bool first, bool write) {
-  return first ? (write ? "Mutating" : "Read-only")
-               : (write ? "Previous mutating" : "Previous read-only");
+  return first ? (write ? "Modifying" : "Read-only")
+               : (write ? "Previous modifying" : "Previous read-only");
 }
 
-static const char *SwiftMopDesc(bool first) {
-  return first ? "Modifying" : "Previous modifying";
-}
-
-static void PrintMop(const ReportMop *mop, bool mark_frames, bool first) {
+static void PrintMop(const ReportMop *mop, bool first) {
   Decorator d;
   char thrbuf[kThreadBufSize];
   Printf("%s", d.Access());
-  const char *object_type = GetObjectTypeFromTag(mop->external_tag);
-  if (mop->external_tag == kExternalTagSwiftModifyingAccess) {
-    Printf("  %s access at %p by %s",
-           SwiftMopDesc(first), (void *)mop->addr,
-           thread_name(thrbuf, mop->tid));
-  } else if (mop->external_tag == kExternalTagNone || !object_type) {
+  if (mop->external_tag == kExternalTagNone) {
     Printf("  %s of size %d at %p by %s",
            MopDesc(first, mop->write, mop->atomic), mop->size,
            (void *)mop->addr, thread_name(thrbuf, mop->tid));
   } else {
-    Printf("  %s access of object %s at %p by %s",
+    const char *object_type = GetObjectTypeFromTag(mop->external_tag);
+    if (object_type == nullptr)
+        object_type = "external object";
+    Printf("  %s access of %s at %p by %s",
            ExternalMopDesc(first, mop->write), object_type,
            (void *)mop->addr, thread_name(thrbuf, mop->tid));
   }
   PrintMutexSet(mop->mset);
   Printf(":\n");
   Printf("%s", d.EndAccess());
-  PrintStack(mop->stack, mark_frames);
+  PrintStack(mop->stack);
 }
 
 static void PrintLocation(const ReportLocation *loc) {
@@ -215,7 +207,7 @@
              loc->heap_chunk_size, loc->heap_chunk_start,
              thread_name(thrbuf, loc->tid));
     } else {
-      Printf("  Location is %s object of size %zu at %p allocated by %s:\n",
+      Printf("  Location is %s of size %zu at %p allocated by %s:\n",
              object_type, loc->heap_chunk_size, loc->heap_chunk_start,
              thread_name(thrbuf, loc->tid));
     }
@@ -319,38 +311,21 @@
   return false;
 }
 
-static bool FillResponsibleFrame(ReportStack *stack, ReportType typ) {
-  if (stack) {
-    SymbolizedStack *frame = stack->frames;
-    while (FrameIsInternal(frame) && frame->next) frame = frame->next;
-    if (typ == ReportTypeExternalRace && frame->next) frame = frame->next;
-    if (stack) {
-      stack->responsible_frame = frame;
-      return stack->responsible_frame != stack->frames;
-    }
-  }
-  return false;
+static SymbolizedStack *SkipTsanInternalFrames(SymbolizedStack *frames) {
+  while (FrameIsInternal(frames) && frames->next)
+    frames = frames->next;
+  return frames;
 }
 
 void PrintReport(const ReportDesc *rep) {
   Decorator d;
   Printf("==================\n");
-  const char *rep_typ_str = ReportTypeString(rep->typ);
+  const char *rep_typ_str = ReportTypeString(rep->typ, rep->tag);
   Printf("%s", d.Warning());
   Printf("WARNING: ThreadSanitizer: %s (pid=%d)\n", rep_typ_str,
          (int)internal_getpid());
   Printf("%s", d.EndWarning());
 
-  bool should_mark_frame = false;
-  for (uptr i = 0; i < rep->mops.Size(); i++)
-    should_mark_frame |= FillResponsibleFrame(rep->mops[i]->stack, rep->typ);
-  for (uptr i = 0; i < rep->stacks.Size(); i++)
-    should_mark_frame |= FillResponsibleFrame(rep->stacks[i], rep->typ);
-  for (uptr i = 0; i < rep->threads.Size(); i++)
-    should_mark_frame |= FillResponsibleFrame(rep->threads[i]->stack, rep->typ);
-  for (uptr i = 0; i < rep->locs.Size(); i++)
-    should_mark_frame |= FillResponsibleFrame(rep->locs[i]->stack, rep->typ);
-
   if (rep->typ == ReportTypeDeadlock) {
     char thrbuf[kThreadBufSize];
     Printf("  Cycle in lock order graph: ");
@@ -385,16 +360,12 @@
     for (uptr i = 0; i < rep->stacks.Size(); i++) {
       if (i)
         Printf("  and:\n");
-      PrintStack(rep->stacks[i], should_mark_frame);
+      PrintStack(rep->stacks[i]);
     }
   }
 
   for (uptr i = 0; i < rep->mops.Size(); i++)
-    PrintMop(rep->mops[i], should_mark_frame, i == 0);
-
-  if (should_mark_frame) {
-    Printf("  Issue is caused by frames marked with \"*\".\n\n");
-  }
+    PrintMop(rep->mops[i], i == 0);
 
   if (rep->sleep)
     PrintSleep(rep->sleep);
@@ -414,8 +385,7 @@
     Printf("  And %d more similar thread leaks.\n\n", rep->count - 1);
 
   if (ReportStack *stack = ChooseSummaryStack(rep)) {
-    SymbolizedStack *frame = stack->responsible_frame ?: stack->frames;
-    if (frame)
+    if (SymbolizedStack *frame = SkipTsanInternalFrames(stack->frames))
       ReportErrorSummary(rep_typ_str, frame->info);
   }
 
@@ -428,7 +398,7 @@
 
 const int kMainThreadId = 1;
 
-void PrintStack(const ReportStack *ent, bool mark_frames) {
+void PrintStack(const ReportStack *ent) {
   if (ent == 0 || ent->frames == 0) {
     Printf("  [failed to restore the stack]\n");
     return;
diff --git a/lib/tsan/rtl/tsan_report.h b/lib/tsan/rtl/tsan_report.h
index f524d79..bc1582f 100644
--- a/lib/tsan/rtl/tsan_report.h
+++ b/lib/tsan/rtl/tsan_report.h
@@ -25,7 +25,6 @@
   ReportTypeUseAfterFree,
   ReportTypeVptrUseAfterFree,
   ReportTypeExternalRace,
-  ReportTypeSwiftAccessRace,
   ReportTypeThreadLeak,
   ReportTypeMutexDestroyLocked,
   ReportTypeMutexDoubleLock,
@@ -41,7 +40,6 @@
 struct ReportStack {
   SymbolizedStack *frames;
   bool suppressable;
-  SymbolizedStack *responsible_frame;
   static ReportStack *New();
 
  private:
@@ -92,7 +90,7 @@
 
 struct ReportThread {
   int id;
-  uptr os_id;
+  tid_t os_id;
   bool running;
   bool workerthread;
   char *name;
@@ -110,6 +108,7 @@
 class ReportDesc {
  public:
   ReportType typ;
+  uptr tag;
   Vector<ReportStack*> stacks;
   Vector<ReportMop*> mops;
   Vector<ReportLocation*> locs;
@@ -129,7 +128,7 @@
 
 // Format and output the report to the console/log. No additional logic.
 void PrintReport(const ReportDesc *rep);
-void PrintStack(const ReportStack *ent, bool mark_frames = false);
+void PrintStack(const ReportStack *stack);
 
 }  // namespace __tsan
 
diff --git a/lib/tsan/rtl/tsan_rtl.cc b/lib/tsan/rtl/tsan_rtl.cc
index bd98740..a015253 100644
--- a/lib/tsan/rtl/tsan_rtl.cc
+++ b/lib/tsan/rtl/tsan_rtl.cc
@@ -104,7 +104,8 @@
   , racy_stacks(MBlockRacyStacks)
   , racy_addresses(MBlockRacyAddresses)
   , fired_suppressions_mtx(MutexTypeFired, StatMtxFired)
-  , fired_suppressions(8) {
+  , fired_suppressions(8)
+  , clock_alloc("clock allocator") {
 }
 
 // The objects are allocated in TLS, so one may rely on zero-initialization.
@@ -866,9 +867,8 @@
   // Don't want to touch lots of shadow memory.
   // If a program maps 10MB stack, there is no need reset the whole range.
   size = (size + (kShadowCell - 1)) & ~(kShadowCell - 1);
-  // UnmapOrDie/MmapFixedNoReserve does not work on Windows,
-  // so we do it only for C/C++.
-  if (SANITIZER_GO || size < common_flags()->clear_shadow_mmap_threshold) {
+  // UnmapOrDie/MmapFixedNoReserve does not work on Windows.
+  if (SANITIZER_WINDOWS || size < common_flags()->clear_shadow_mmap_threshold) {
     u64 *p = (u64*)MemToShadow(addr);
     CHECK(IsShadowMem((uptr)p));
     CHECK(IsShadowMem((uptr)(p + size * kShadowCnt / kShadowCell - 1)));
@@ -993,8 +993,8 @@
 
 void ThreadIgnoreEnd(ThreadState *thr, uptr pc) {
   DPrintf("#%d: ThreadIgnoreEnd\n", thr->tid);
+  CHECK_GT(thr->ignore_reads_and_writes, 0);
   thr->ignore_reads_and_writes--;
-  CHECK_GE(thr->ignore_reads_and_writes, 0);
   if (thr->ignore_reads_and_writes == 0) {
     thr->fast_state.ClearIgnoreBit();
 #if !SANITIZER_GO
@@ -1011,20 +1011,20 @@
 }
 #endif
 
-void ThreadIgnoreSyncBegin(ThreadState *thr, uptr pc) {
+void ThreadIgnoreSyncBegin(ThreadState *thr, uptr pc, bool save_stack) {
   DPrintf("#%d: ThreadIgnoreSyncBegin\n", thr->tid);
   thr->ignore_sync++;
   CHECK_GT(thr->ignore_sync, 0);
 #if !SANITIZER_GO
-  if (!ctx->after_multithreaded_fork)
+  if (save_stack && !ctx->after_multithreaded_fork)
     thr->sync_ignore_set.Add(CurrentStackId(thr, pc));
 #endif
 }
 
 void ThreadIgnoreSyncEnd(ThreadState *thr, uptr pc) {
   DPrintf("#%d: ThreadIgnoreSyncEnd\n", thr->tid);
+  CHECK_GT(thr->ignore_sync, 0);
   thr->ignore_sync--;
-  CHECK_GE(thr->ignore_sync, 0);
 #if !SANITIZER_GO
   if (thr->ignore_sync == 0)
     thr->sync_ignore_set.Reset();
diff --git a/lib/tsan/rtl/tsan_rtl.h b/lib/tsan/rtl/tsan_rtl.h
index 72c0df2..2cf2e16 100644
--- a/lib/tsan/rtl/tsan_rtl.h
+++ b/lib/tsan/rtl/tsan_rtl.h
@@ -55,16 +55,22 @@
 #if !SANITIZER_GO
 struct MapUnmapCallback;
 #if defined(__mips64) || defined(__aarch64__) || defined(__powerpc__)
-static const uptr kAllocatorSpace = 0;
-static const uptr kAllocatorSize = SANITIZER_MMAP_RANGE_SIZE;
 static const uptr kAllocatorRegionSizeLog = 20;
 static const uptr kAllocatorNumRegions =
-    kAllocatorSize >> kAllocatorRegionSizeLog;
+    SANITIZER_MMAP_RANGE_SIZE >> kAllocatorRegionSizeLog;
 typedef TwoLevelByteMap<(kAllocatorNumRegions >> 12), 1 << 12,
     MapUnmapCallback> ByteMap;
-typedef SizeClassAllocator32<kAllocatorSpace, kAllocatorSize, 0,
-    CompactSizeClassMap, kAllocatorRegionSizeLog, ByteMap,
-    MapUnmapCallback> PrimaryAllocator;
+struct AP32 {
+  static const uptr kSpaceBeg = 0;
+  static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+  static const uptr kMetadataSize = 0;
+  typedef __sanitizer::CompactSizeClassMap SizeClassMap;
+  static const uptr kRegionSizeLog = kAllocatorRegionSizeLog;
+  typedef __tsan::ByteMap ByteMap;
+  typedef __tsan::MapUnmapCallback MapUnmapCallback;
+  static const uptr kFlags = 0;
+};
+typedef SizeClassAllocator32<AP32> PrimaryAllocator;
 #else
 struct AP64 {  // Allocator64 parameters. Deliberately using a short name.
   static const uptr kSpaceBeg = Mapping::kHeapMemBeg;
@@ -546,6 +552,10 @@
 
 extern Context *ctx;  // The one and the only global runtime context.
 
+ALWAYS_INLINE Flags *flags() {
+  return &ctx->flags;
+}
+
 struct ScopedIgnoreInterceptors {
   ScopedIgnoreInterceptors() {
 #if !SANITIZER_GO
@@ -560,9 +570,13 @@
   }
 };
 
+const char *GetObjectTypeFromTag(uptr tag);
+const char *GetReportHeaderFromTag(uptr tag);
+uptr TagFromShadowStackFrame(uptr pc);
+
 class ScopedReport {
  public:
-  explicit ScopedReport(ReportType typ);
+  explicit ScopedReport(ReportType typ, uptr tag = kExternalTagNone);
   ~ScopedReport();
 
   void AddMemoryAccess(uptr addr, uptr external_tag, Shadow s, StackTrace stack,
@@ -576,7 +590,6 @@
   void AddLocation(uptr addr, uptr size);
   void AddSleep(u32 stack_id);
   void SetCount(int count);
-  void SetType(ReportType typ);
 
   const ReportDesc *GetReport() const;
 
@@ -594,10 +607,26 @@
 
 ThreadContext *IsThreadStackOrTls(uptr addr, bool *is_stack);
 void RestoreStack(int tid, const u64 epoch, VarSizeStackTrace *stk,
-                  MutexSet *mset);
+                  MutexSet *mset, uptr *tag = nullptr);
+
+// The stack could look like:
+//   <start> | <main> | <foo> | tag | <bar>
+// This will extract the tag and keep:
+//   <start> | <main> | <foo> | <bar>
+template<typename StackTraceTy>
+void ExtractTagFromStack(StackTraceTy *stack, uptr *tag = nullptr) {
+  if (stack->size < 2) return;
+  uptr possible_tag_pc = stack->trace[stack->size - 2];
+  uptr possible_tag = TagFromShadowStackFrame(possible_tag_pc);
+  if (possible_tag == kExternalTagNone) return;
+  stack->trace_buffer[stack->size - 2] = stack->trace_buffer[stack->size - 1];
+  stack->size -= 1;
+  if (tag) *tag = possible_tag;
+}
 
 template<typename StackTraceTy>
-void ObtainCurrentStack(ThreadState *thr, uptr toppc, StackTraceTy *stack) {
+void ObtainCurrentStack(ThreadState *thr, uptr toppc, StackTraceTy *stack,
+                        uptr *tag = nullptr) {
   uptr size = thr->shadow_stack_pos - thr->shadow_stack;
   uptr start = 0;
   if (size + !!toppc > kStackTraceMax) {
@@ -605,6 +634,7 @@
     size = kStackTraceMax - !!toppc;
   }
   stack->Init(&thr->shadow_stack[start], size, toppc);
+  ExtractTagFromStack(stack, tag);
 }
 
 
@@ -642,17 +672,6 @@
 bool IsExpectedReport(uptr addr, uptr size);
 void PrintMatchedBenignRaces();
 
-enum ExternalTag : uptr {
-  kExternalTagNone = 0,
-  kExternalTagSwiftModifyingAccess = 1,
-  kExternalTagFirstUserAvailable = 128,
-  kExternalTagMax = 1024,
-  // Don't set kExternalTagMax over 65,536, since MBlock only stores tags
-  // as 16-bit values, see tsan_defs.h.
-};
-const char *GetObjectTypeFromTag(uptr tag);
-uptr TagFromShadowStackFrame(uptr pc);
-
 #if defined(TSAN_DEBUG_OUTPUT) && TSAN_DEBUG_OUTPUT >= 1
 # define DPrintf Printf
 #else
@@ -719,14 +738,14 @@
 
 void ThreadIgnoreBegin(ThreadState *thr, uptr pc, bool save_stack = true);
 void ThreadIgnoreEnd(ThreadState *thr, uptr pc);
-void ThreadIgnoreSyncBegin(ThreadState *thr, uptr pc);
+void ThreadIgnoreSyncBegin(ThreadState *thr, uptr pc, bool save_stack = true);
 void ThreadIgnoreSyncEnd(ThreadState *thr, uptr pc);
 
 void FuncEntry(ThreadState *thr, uptr pc);
 void FuncExit(ThreadState *thr);
 
 int ThreadCreate(ThreadState *thr, uptr pc, uptr uid, bool detached);
-void ThreadStart(ThreadState *thr, int tid, uptr os_id, bool workerthread);
+void ThreadStart(ThreadState *thr, int tid, tid_t os_id, bool workerthread);
 void ThreadFinish(ThreadState *thr);
 int ThreadTid(ThreadState *thr, uptr pc, uptr uid);
 void ThreadJoin(ThreadState *thr, uptr pc, int tid);
@@ -741,13 +760,16 @@
 void ProcWire(Processor *proc, ThreadState *thr);
 void ProcUnwire(Processor *proc, ThreadState *thr);
 
-void MutexCreate(ThreadState *thr, uptr pc, uptr addr,
-                 bool rw, bool recursive, bool linker_init);
-void MutexDestroy(ThreadState *thr, uptr pc, uptr addr);
-void MutexLock(ThreadState *thr, uptr pc, uptr addr, int rec = 1,
-               bool try_lock = false);
-int  MutexUnlock(ThreadState *thr, uptr pc, uptr addr, bool all = false);
-void MutexReadLock(ThreadState *thr, uptr pc, uptr addr, bool try_lock = false);
+// Note: the parameter is called flagz, because flags is already taken
+// by the global function that returns flags.
+void MutexCreate(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0);
+void MutexDestroy(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0);
+void MutexPreLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0);
+void MutexPostLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0,
+    int rec = 1);
+int  MutexUnlock(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0);
+void MutexPreReadLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0);
+void MutexPostReadLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz = 0);
 void MutexReadUnlock(ThreadState *thr, uptr pc, uptr addr);
 void MutexReadOrWriteUnlock(ThreadState *thr, uptr pc, uptr addr);
 void MutexRepair(ThreadState *thr, uptr pc, uptr addr);  // call on EOWNERDEAD
diff --git a/lib/tsan/rtl/tsan_rtl_aarch64.S b/lib/tsan/rtl/tsan_rtl_aarch64.S
index ef06f04..61171d6 100644
--- a/lib/tsan/rtl/tsan_rtl_aarch64.S
+++ b/lib/tsan/rtl/tsan_rtl_aarch64.S
@@ -1,13 +1,46 @@
+// The content of this file is AArch64-only:
+#if defined(__aarch64__)
+
 #include "sanitizer_common/sanitizer_asm.h"
 
+#if !defined(__APPLE__)
 .section .bss
 .type	__tsan_pointer_chk_guard, %object
-.size	__tsan_pointer_chk_guard, 8
+ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(__tsan_pointer_chk_guard))
 __tsan_pointer_chk_guard:
 .zero	8
+#endif
 
+#if defined(__APPLE__)
+.align  2
+
+.section  __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
+.long _setjmp$non_lazy_ptr
+_setjmp$non_lazy_ptr:
+.indirect_symbol _setjmp
+.long 0
+
+.section  __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
+.long __setjmp$non_lazy_ptr
+__setjmp$non_lazy_ptr:
+.indirect_symbol __setjmp
+.long 0
+
+.section  __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
+.long _sigsetjmp$non_lazy_ptr
+_sigsetjmp$non_lazy_ptr:
+.indirect_symbol _sigsetjmp
+.long 0
+#endif
+
+#if !defined(__APPLE__)
 .section .text
+#else
+.section __TEXT,__text
+.align 3
+#endif
 
+#if !defined(__APPLE__)
 // GLIBC mangles the function pointers in jmp_buf (used in {set,long}*jmp
 // functions) by XORing them with a random guard pointer.  For AArch64 it is a
 // global variable rather than a TCB one (as for x86_64/powerpc) and althought
@@ -16,9 +49,9 @@
 // not stable). So InitializeGuardPtr obtains the pointer guard value by
 // issuing a setjmp and checking the resulting pointers values against the
 // original ones.
-.hidden _Z18InitializeGuardPtrv
+ASM_HIDDEN(_Z18InitializeGuardPtrv)
 .global _Z18InitializeGuardPtrv
-.type _Z18InitializeGuardPtrv, @function
+ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(_Z18InitializeGuardPtrv))
 _Z18InitializeGuardPtrv:
   CFI_STARTPROC
   // Allocates a jmp_buf for the setjmp call.
@@ -55,12 +88,14 @@
   CFI_DEF_CFA (31, 0)
   ret
   CFI_ENDPROC
-.size _Z18InitializeGuardPtrv, .-_Z18InitializeGuardPtrv
+ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(_Z18InitializeGuardPtrv))
+#endif
 
-.hidden __tsan_setjmp
+ASM_HIDDEN(__tsan_setjmp)
 .comm _ZN14__interception11real_setjmpE,8,8
-.type setjmp, @function
-setjmp:
+.globl ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp)
+ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp))
+ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp):
   CFI_STARTPROC
 
   // save env parameters for function call
@@ -78,14 +113,19 @@
   CFI_OFFSET (19, -16)
   mov     x19, x0
 
+#if !defined(__APPLE__)
   // SP pointer mangling (see glibc setjmp)
   adrp    x2, __tsan_pointer_chk_guard
   ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
   eor     x1, x2, x0
+#else
+  add     x0, x29, 32
+  mov     x1, x0
+#endif
 
   // call tsan interceptor
-  bl      __tsan_setjmp
+  bl      ASM_TSAN_SYMBOL(__tsan_setjmp)
 
   // restore env parameter
   mov     x0, x19
@@ -96,18 +136,24 @@
   CFI_DEF_CFA (31, 0)
 
   // tail jump to libc setjmp
+#if !defined(__APPLE__)
   adrp    x1, :got:_ZN14__interception11real_setjmpE
   ldr     x1, [x1, #:got_lo12:_ZN14__interception11real_setjmpE]
   ldr     x1, [x1]
+#else
+  adrp    x1, _setjmp$non_lazy_ptr@page
+  add     x1, x1, _setjmp$non_lazy_ptr@pageoff
+  ldr     x1, [x1]
+#endif
   br      x1
 
   CFI_ENDPROC
-.size setjmp, .-setjmp
+ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp))
 
 .comm _ZN14__interception12real__setjmpE,8,8
-.globl _setjmp
-.type _setjmp, @function
-_setjmp:
+.globl ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp)
+ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp))
+ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp):
   CFI_STARTPROC
 
   // save env parameters for function call
@@ -125,14 +171,19 @@
   CFI_OFFSET (19, -16)
   mov     x19, x0
 
+#if !defined(__APPLE__)
   // SP pointer mangling (see glibc setjmp)
   adrp    x2, __tsan_pointer_chk_guard
   ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
   eor     x1, x2, x0
+#else
+  add     x0, x29, 32
+  mov     x1, x0
+#endif
 
   // call tsan interceptor
-  bl      __tsan_setjmp
+  bl      ASM_TSAN_SYMBOL(__tsan_setjmp)
 
   // Restore jmp_buf parameter
   mov     x0, x19
@@ -143,18 +194,24 @@
   CFI_DEF_CFA (31, 0)
 
   // tail jump to libc setjmp
+#if !defined(__APPLE__)
   adrp    x1, :got:_ZN14__interception12real__setjmpE
   ldr     x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]
   ldr     x1, [x1]
+#else
+  adrp    x1, __setjmp$non_lazy_ptr@page
+  add     x1, x1, __setjmp$non_lazy_ptr@pageoff
+  ldr     x1, [x1]
+#endif
   br      x1
 
   CFI_ENDPROC
-.size _setjmp, .-_setjmp
+ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp))
 
 .comm _ZN14__interception14real_sigsetjmpE,8,8
-.globl sigsetjmp
-.type sigsetjmp, @function
-sigsetjmp:
+.globl ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp)
+ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp))
+ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp):
   CFI_STARTPROC
 
   // save env parameters for function call
@@ -174,14 +231,19 @@
   mov     w20, w1
   mov     x19, x0
 
+#if !defined(__APPLE__)
   // SP pointer mangling (see glibc setjmp)
   adrp    x2, __tsan_pointer_chk_guard
   ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
   eor     x1, x2, x0
+#else
+  add     x0, x29, 32
+  mov     x1, x0
+#endif
 
   // call tsan interceptor
-  bl      __tsan_setjmp
+  bl      ASM_TSAN_SYMBOL(__tsan_setjmp)
 
   // restore env parameter
   mov     w1, w20
@@ -195,17 +257,24 @@
   CFI_DEF_CFA (31, 0)
 
   // tail jump to libc sigsetjmp
+#if !defined(__APPLE__)
   adrp    x2, :got:_ZN14__interception14real_sigsetjmpE
   ldr     x2, [x2, #:got_lo12:_ZN14__interception14real_sigsetjmpE]
   ldr     x2, [x2]
+#else
+  adrp    x2, _sigsetjmp$non_lazy_ptr@page
+  add     x2, x2, _sigsetjmp$non_lazy_ptr@pageoff
+  ldr     x2, [x2]
+#endif
   br      x2
   CFI_ENDPROC
-.size sigsetjmp, .-sigsetjmp
+ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp))
 
+#if !defined(__APPLE__)
 .comm _ZN14__interception16real___sigsetjmpE,8,8
-.globl __sigsetjmp
-.type __sigsetjmp, @function
-__sigsetjmp:
+.globl ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp)
+ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp))
+ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp):
   CFI_STARTPROC
 
   // save env parameters for function call
@@ -225,14 +294,16 @@
   mov     w20, w1
   mov     x19, x0
 
+#if !defined(__APPLE__)
   // SP pointer mangling (see glibc setjmp)
   adrp    x2, __tsan_pointer_chk_guard
   ldr     x2, [x2, #:lo12:__tsan_pointer_chk_guard]
   add     x0, x29, 32
   eor     x1, x2, x0
+#endif
 
   // call tsan interceptor
-  bl      __tsan_setjmp
+  bl      ASM_TSAN_SYMBOL(__tsan_setjmp)
 
   mov     w1, w20
   mov     x0, x19
@@ -245,14 +316,22 @@
   CFI_DEF_CFA (31, 0)
 
   // tail jump to libc __sigsetjmp
+#if !defined(__APPLE__)
   adrp    x2, :got:_ZN14__interception16real___sigsetjmpE
   ldr     x2, [x2, #:got_lo12:_ZN14__interception16real___sigsetjmpE]
   ldr     x2, [x2]
+#else
+  adrp    x2, ASM_TSAN_SYMBOL(__sigsetjmp)@page
+  add     x2, x2, ASM_TSAN_SYMBOL(__sigsetjmp)@pageoff
+#endif
   br      x2
   CFI_ENDPROC
-.size __sigsetjmp, .-__sigsetjmp
+ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp))
+#endif
 
 #if defined(__linux__)
 /* We do not need executable stack.  */
 .section        .note.GNU-stack,"",@progbits
 #endif
+
+#endif
diff --git a/lib/tsan/rtl/tsan_rtl_amd64.S b/lib/tsan/rtl/tsan_rtl_amd64.S
index caa8323..98947fd 100644
--- a/lib/tsan/rtl/tsan_rtl_amd64.S
+++ b/lib/tsan/rtl/tsan_rtl_amd64.S
@@ -1,4 +1,8 @@
+// The content of this file is x86_64-only:
+#if defined(__x86_64__)
+
 #include "sanitizer_common/sanitizer_asm.h"
+
 #if !defined(__APPLE__)
 .section .text
 #else
@@ -357,3 +361,5 @@
 /* We do not need executable stack.  */
 .section        .note.GNU-stack,"",@progbits
 #endif
+
+#endif
diff --git a/lib/tsan/rtl/tsan_rtl_mutex.cc b/lib/tsan/rtl/tsan_rtl_mutex.cc
index f3b51c3..2f85811 100644
--- a/lib/tsan/rtl/tsan_rtl_mutex.cc
+++ b/lib/tsan/rtl/tsan_rtl_mutex.cc
@@ -62,32 +62,29 @@
   OutputReport(thr, rep);
 }
 
-void MutexCreate(ThreadState *thr, uptr pc, uptr addr,
-                 bool rw, bool recursive, bool linker_init) {
-  DPrintf("#%d: MutexCreate %zx\n", thr->tid, addr);
+void MutexCreate(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
+  DPrintf("#%d: MutexCreate %zx flagz=0x%x\n", thr->tid, addr, flagz);
   StatInc(thr, StatMutexCreate);
-  if (!linker_init && IsAppMem(addr)) {
+  if (!(flagz & MutexFlagLinkerInit) && IsAppMem(addr)) {
     CHECK(!thr->is_freeing);
     thr->is_freeing = true;
     MemoryWrite(thr, pc, addr, kSizeLog1);
     thr->is_freeing = false;
   }
   SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, addr, true);
-  s->is_rw = rw;
-  s->is_recursive = recursive;
-  s->is_linker_init = linker_init;
+  s->SetFlags(flagz & MutexCreationFlagMask);
   if (!SANITIZER_GO && s->creation_stack_id == 0)
     s->creation_stack_id = CurrentStackId(thr, pc);
   s->mtx.Unlock();
 }
 
-void MutexDestroy(ThreadState *thr, uptr pc, uptr addr) {
+void MutexDestroy(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
   DPrintf("#%d: MutexDestroy %zx\n", thr->tid, addr);
   StatInc(thr, StatMutexDestroy);
   SyncVar *s = ctx->metamap.GetIfExistsAndLock(addr, true);
   if (s == 0)
     return;
-  if (s->is_linker_init) {
+  if ((flagz & MutexFlagLinkerInit) || s->IsFlagSet(MutexFlagLinkerInit)) {
     // Destroy is no-op for linker-initialized mutexes.
     s->mtx.Unlock();
     return;
@@ -100,8 +97,8 @@
   bool unlock_locked = false;
   if (flags()->report_destroy_locked
       && s->owner_tid != SyncVar::kInvalidTid
-      && !s->is_broken) {
-    s->is_broken = true;
+      && !s->IsFlagSet(MutexFlagBroken)) {
+    s->SetFlags(MutexFlagBroken);
     unlock_locked = true;
   }
   u64 mid = s->GetId();
@@ -141,12 +138,33 @@
   // s will be destroyed and freed in MetaMap::FreeBlock.
 }
 
-void MutexLock(ThreadState *thr, uptr pc, uptr addr, int rec, bool try_lock) {
-  DPrintf("#%d: MutexLock %zx rec=%d\n", thr->tid, addr, rec);
-  CHECK_GT(rec, 0);
+void MutexPreLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
+  DPrintf("#%d: MutexPreLock %zx flagz=0x%x\n", thr->tid, addr, flagz);
+  if (!(flagz & MutexFlagTryLock) && common_flags()->detect_deadlocks) {
+    SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, addr, false);
+    s->UpdateFlags(flagz);
+    if (s->owner_tid != thr->tid) {
+      Callback cb(thr, pc);
+      ctx->dd->MutexBeforeLock(&cb, &s->dd, true);
+      s->mtx.ReadUnlock();
+      ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
+    } else {
+      s->mtx.ReadUnlock();
+    }
+  }
+}
+
+void MutexPostLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz, int rec) {
+  DPrintf("#%d: MutexPostLock %zx flag=0x%x rec=%d\n",
+      thr->tid, addr, flagz, rec);
+  if (flagz & MutexFlagRecursiveLock)
+    CHECK_GT(rec, 0);
+  else
+    rec = 1;
   if (IsAppMem(addr))
     MemoryReadAtomic(thr, pc, addr, kSizeLog1);
   SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, addr, true);
+  s->UpdateFlags(flagz);
   thr->fast_state.IncrementEpoch();
   TraceAddEvent(thr, thr->fast_state, EventTypeLock, s->GetId());
   bool report_double_lock = false;
@@ -156,38 +174,43 @@
     s->last_lock = thr->fast_state.raw();
   } else if (s->owner_tid == thr->tid) {
     CHECK_GT(s->recursion, 0);
-  } else if (flags()->report_mutex_bugs && !s->is_broken) {
-    s->is_broken = true;
+  } else if (flags()->report_mutex_bugs && !s->IsFlagSet(MutexFlagBroken)) {
+    s->SetFlags(MutexFlagBroken);
     report_double_lock = true;
   }
-  if (s->recursion == 0) {
+  const bool first = s->recursion == 0;
+  s->recursion += rec;
+  if (first) {
     StatInc(thr, StatMutexLock);
     AcquireImpl(thr, pc, &s->clock);
     AcquireImpl(thr, pc, &s->read_clock);
-  } else if (!s->is_recursive) {
+  } else if (!s->IsFlagSet(MutexFlagWriteReentrant)) {
     StatInc(thr, StatMutexRecLock);
   }
-  s->recursion += rec;
   thr->mset.Add(s->GetId(), true, thr->fast_state.epoch());
-  if (common_flags()->detect_deadlocks && (s->recursion - rec) == 0) {
+  bool pre_lock = false;
+  if (first && common_flags()->detect_deadlocks) {
+    pre_lock = (flagz & MutexFlagDoPreLockOnPostLock) &&
+        !(flagz & MutexFlagTryLock);
     Callback cb(thr, pc);
-    if (!try_lock)
+    if (pre_lock)
       ctx->dd->MutexBeforeLock(&cb, &s->dd, true);
-    ctx->dd->MutexAfterLock(&cb, &s->dd, true, try_lock);
+    ctx->dd->MutexAfterLock(&cb, &s->dd, true, flagz & MutexFlagTryLock);
   }
   u64 mid = s->GetId();
   s->mtx.Unlock();
   // Can't touch s after this point.
+  s = 0;
   if (report_double_lock)
     ReportMutexMisuse(thr, pc, ReportTypeMutexDoubleLock, addr, mid);
-  if (common_flags()->detect_deadlocks) {
+  if (first && pre_lock && common_flags()->detect_deadlocks) {
     Callback cb(thr, pc);
     ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
   }
 }
 
-int MutexUnlock(ThreadState *thr, uptr pc, uptr addr, bool all) {
-  DPrintf("#%d: MutexUnlock %zx all=%d\n", thr->tid, addr, all);
+int MutexUnlock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
+  DPrintf("#%d: MutexUnlock %zx flagz=0x%x\n", thr->tid, addr, flagz);
   if (IsAppMem(addr))
     MemoryReadAtomic(thr, pc, addr, kSizeLog1);
   SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, addr, true);
@@ -196,12 +219,12 @@
   int rec = 0;
   bool report_bad_unlock = false;
   if (!SANITIZER_GO && (s->recursion == 0 || s->owner_tid != thr->tid)) {
-    if (flags()->report_mutex_bugs && !s->is_broken) {
-      s->is_broken = true;
+    if (flags()->report_mutex_bugs && !s->IsFlagSet(MutexFlagBroken)) {
+      s->SetFlags(MutexFlagBroken);
       report_bad_unlock = true;
     }
   } else {
-    rec = all ? s->recursion : 1;
+    rec = (flagz & MutexFlagRecursiveUnlock) ? s->recursion : 1;
     s->recursion -= rec;
     if (s->recursion == 0) {
       StatInc(thr, StatMutexUnlock);
@@ -229,36 +252,53 @@
   return rec;
 }
 
-void MutexReadLock(ThreadState *thr, uptr pc, uptr addr, bool trylock) {
-  DPrintf("#%d: MutexReadLock %zx\n", thr->tid, addr);
+void MutexPreReadLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
+  DPrintf("#%d: MutexPreReadLock %zx flagz=0x%x\n", thr->tid, addr, flagz);
+  if (!(flagz & MutexFlagTryLock) && common_flags()->detect_deadlocks) {
+    SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, addr, false);
+    s->UpdateFlags(flagz);
+    Callback cb(thr, pc);
+    ctx->dd->MutexBeforeLock(&cb, &s->dd, false);
+    s->mtx.ReadUnlock();
+    ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
+  }
+}
+
+void MutexPostReadLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
+  DPrintf("#%d: MutexPostReadLock %zx flagz=0x%x\n", thr->tid, addr, flagz);
   StatInc(thr, StatMutexReadLock);
   if (IsAppMem(addr))
     MemoryReadAtomic(thr, pc, addr, kSizeLog1);
   SyncVar *s = ctx->metamap.GetOrCreateAndLock(thr, pc, addr, false);
+  s->UpdateFlags(flagz);
   thr->fast_state.IncrementEpoch();
   TraceAddEvent(thr, thr->fast_state, EventTypeRLock, s->GetId());
   bool report_bad_lock = false;
   if (s->owner_tid != SyncVar::kInvalidTid) {
-    if (flags()->report_mutex_bugs && !s->is_broken) {
-      s->is_broken = true;
+    if (flags()->report_mutex_bugs && !s->IsFlagSet(MutexFlagBroken)) {
+      s->SetFlags(MutexFlagBroken);
       report_bad_lock = true;
     }
   }
   AcquireImpl(thr, pc, &s->clock);
   s->last_lock = thr->fast_state.raw();
   thr->mset.Add(s->GetId(), false, thr->fast_state.epoch());
-  if (common_flags()->detect_deadlocks && s->recursion == 0) {
+  bool pre_lock = false;
+  if (common_flags()->detect_deadlocks) {
+    pre_lock = (flagz & MutexFlagDoPreLockOnPostLock) &&
+        !(flagz & MutexFlagTryLock);
     Callback cb(thr, pc);
-    if (!trylock)
+    if (pre_lock)
       ctx->dd->MutexBeforeLock(&cb, &s->dd, false);
-    ctx->dd->MutexAfterLock(&cb, &s->dd, false, trylock);
+    ctx->dd->MutexAfterLock(&cb, &s->dd, false, flagz & MutexFlagTryLock);
   }
   u64 mid = s->GetId();
   s->mtx.ReadUnlock();
   // Can't touch s after this point.
+  s = 0;
   if (report_bad_lock)
     ReportMutexMisuse(thr, pc, ReportTypeMutexBadReadLock, addr, mid);
-  if (common_flags()->detect_deadlocks) {
+  if (pre_lock  && common_flags()->detect_deadlocks) {
     Callback cb(thr, pc);
     ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
   }
@@ -274,8 +314,8 @@
   TraceAddEvent(thr, thr->fast_state, EventTypeRUnlock, s->GetId());
   bool report_bad_unlock = false;
   if (s->owner_tid != SyncVar::kInvalidTid) {
-    if (flags()->report_mutex_bugs && !s->is_broken) {
-      s->is_broken = true;
+    if (flags()->report_mutex_bugs && !s->IsFlagSet(MutexFlagBroken)) {
+      s->SetFlags(MutexFlagBroken);
       report_bad_unlock = true;
     }
   }
@@ -323,8 +363,8 @@
     } else {
       StatInc(thr, StatMutexRecUnlock);
     }
-  } else if (!s->is_broken) {
-    s->is_broken = true;
+  } else if (!s->IsFlagSet(MutexFlagBroken)) {
+    s->SetFlags(MutexFlagBroken);
     report_bad_unlock = true;
   }
   thr->mset.Del(s->GetId(), write);
@@ -373,10 +413,10 @@
 static void UpdateClockCallback(ThreadContextBase *tctx_base, void *arg) {
   ThreadState *thr = reinterpret_cast<ThreadState*>(arg);
   ThreadContext *tctx = static_cast<ThreadContext*>(tctx_base);
+  u64 epoch = tctx->epoch1;
   if (tctx->status == ThreadStatusRunning)
-    thr->clock.set(tctx->tid, tctx->thr->fast_state.epoch());
-  else
-    thr->clock.set(tctx->tid, tctx->epoch1);
+    epoch = tctx->thr->fast_state.epoch();
+  thr->clock.set(&thr->proc()->clock_cache, tctx->tid, epoch);
 }
 
 void AcquireGlobal(ThreadState *thr, uptr pc) {
@@ -416,10 +456,10 @@
 static void UpdateSleepClockCallback(ThreadContextBase *tctx_base, void *arg) {
   ThreadState *thr = reinterpret_cast<ThreadState*>(arg);
   ThreadContext *tctx = static_cast<ThreadContext*>(tctx_base);
+  u64 epoch = tctx->epoch1;
   if (tctx->status == ThreadStatusRunning)
-    thr->last_sleep_clock.set(tctx->tid, tctx->thr->fast_state.epoch());
-  else
-    thr->last_sleep_clock.set(tctx->tid, tctx->epoch1);
+    epoch = tctx->thr->fast_state.epoch();
+  thr->last_sleep_clock.set(&thr->proc()->clock_cache, tctx->tid, epoch);
 }
 
 void AfterSleep(ThreadState *thr, uptr pc) {
diff --git a/lib/tsan/rtl/tsan_rtl_report.cc b/lib/tsan/rtl/tsan_rtl_report.cc
index 137cd42..85a9829 100644
--- a/lib/tsan/rtl/tsan_rtl_report.cc
+++ b/lib/tsan/rtl/tsan_rtl_report.cc
@@ -143,11 +143,12 @@
   return stack;
 }
 
-ScopedReport::ScopedReport(ReportType typ) {
+ScopedReport::ScopedReport(ReportType typ, uptr tag) {
   ctx->thread_registry->CheckLocked();
   void *mem = internal_alloc(MBlockReport, sizeof(ReportDesc));
   rep_ = new(mem) ReportDesc;
   rep_->typ = typ;
+  rep_->tag = tag;
   ctx->report_mtx.Lock();
   CommonSanitizerReportMutex.Lock();
 }
@@ -313,7 +314,7 @@
     return;
 #if !SANITIZER_GO
   int fd = -1;
-  int creat_tid = -1;
+  int creat_tid = kInvalidTid;
   u32 creat_stack = 0;
   if (FdLocation(addr, &fd, &creat_tid, &creat_stack)) {
     ReportLocation *loc = ReportLocation::New(ReportLocationFD);
@@ -372,16 +373,12 @@
   rep_->count = count;
 }
 
-void ScopedReport::SetType(ReportType typ) {
-  rep_->typ = typ;
-}
-
 const ReportDesc *ScopedReport::GetReport() const {
   return rep_;
 }
 
 void RestoreStack(int tid, const u64 epoch, VarSizeStackTrace *stk,
-                  MutexSet *mset) {
+                  MutexSet *mset, uptr *tag) {
   // This function restores stack trace and mutex set for the thread/epoch.
   // It does so by getting stack trace and mutex set at the beginning of
   // trace part, and then replaying the trace till the given epoch.
@@ -440,6 +437,7 @@
     return;
   pos++;
   stk->Init(&stack[0], pos);
+  ExtractTagFromStack(stk, tag);
 }
 
 static bool HandleRacyStacks(ThreadState *thr, VarSizeStackTrace traces[2],
@@ -589,17 +587,6 @@
   return false;
 }
 
-static uptr RetrieveTagFromStackTrace(VarSizeStackTrace *trace) {
-  if (!trace) return kExternalTagNone;
-  if (trace->size < 2) return kExternalTagNone;
-  uptr possible_tag_pc = trace->trace[trace->size - 2];
-  uptr tag = TagFromShadowStackFrame(possible_tag_pc);
-  if (tag == kExternalTagNone) return kExternalTagNone;
-  trace->trace_buffer[trace->size - 2] = trace->trace_buffer[trace->size - 1];
-  trace->size -= 1;
-  return tag;
-}
-
 void ReportRace(ThreadState *thr) {
   CheckNoLocks(thr);
 
@@ -646,8 +633,9 @@
 
   const uptr kMop = 2;
   VarSizeStackTrace traces[kMop];
+  uptr tags[kMop] = {kExternalTagNone};
   const uptr toppc = TraceTopPC(thr);
-  ObtainCurrentStack(thr, toppc, &traces[0]);
+  ObtainCurrentStack(thr, toppc, &traces[0], &tags[0]);
   if (IsFiredSuppression(ctx, typ, traces[0]))
     return;
 
@@ -657,27 +645,29 @@
   MutexSet *mset2 = new(&mset_buffer[0]) MutexSet();
 
   Shadow s2(thr->racy_state[1]);
-  RestoreStack(s2.tid(), s2.epoch(), &traces[1], mset2);
+  RestoreStack(s2.tid(), s2.epoch(), &traces[1], mset2, &tags[1]);
   if (IsFiredSuppression(ctx, typ, traces[1]))
     return;
 
   if (HandleRacyStacks(thr, traces, addr_min, addr_max))
     return;
 
-  ThreadRegistryLock l0(ctx->thread_registry);
-  ScopedReport rep(typ);
+  // If any of the accesses has a tag, treat this as an "external" race.
+  uptr tag = kExternalTagNone;
   for (uptr i = 0; i < kMop; i++) {
-    VarSizeStackTrace new_trace;
-    new_trace.Init(traces[i].trace, traces[i].size);
-    uptr tag = RetrieveTagFromStackTrace(&new_trace);
-    if (tag == kExternalTagSwiftModifyingAccess) {
-      rep.SetType(ReportTypeSwiftAccessRace);
-    } else if (tag != kExternalTagNone) {
-      rep.SetType(ReportTypeExternalRace);
+    if (tags[i] != kExternalTagNone) {
+      typ = ReportTypeExternalRace;
+      tag = tags[i];
+      break;
     }
+  }
 
+  ThreadRegistryLock l0(ctx->thread_registry);
+  ScopedReport rep(typ, tag);
+  for (uptr i = 0; i < kMop; i++) {
     Shadow s(thr->racy_state[i]);
-    rep.AddMemoryAccess(addr, tag, s, new_trace, i == 0 ? &thr->mset : mset2);
+    rep.AddMemoryAccess(addr, tags[i], s, traces[i],
+                        i == 0 ? &thr->mset : mset2);
   }
 
   for (uptr i = 0; i < kMop; i++) {
diff --git a/lib/tsan/rtl/tsan_rtl_thread.cc b/lib/tsan/rtl/tsan_rtl_thread.cc
index 7357d97..83fab08 100644
--- a/lib/tsan/rtl/tsan_rtl_thread.cc
+++ b/lib/tsan/rtl/tsan_rtl_thread.cc
@@ -142,6 +142,10 @@
 
   if (common_flags()->detect_deadlocks)
     ctx->dd->DestroyLogicalThread(thr->dd_lt);
+  thr->clock.ResetCached(&thr->proc()->clock_cache);
+#if !SANITIZER_GO
+  thr->last_sleep_clock.ResetCached(&thr->proc()->clock_cache);
+#endif
   thr->~ThreadState();
 #if TSAN_COLLECT_STATS
   StatAggregate(ctx->stat, thr->stat);
@@ -236,7 +240,7 @@
   return tid;
 }
 
-void ThreadStart(ThreadState *thr, int tid, uptr os_id, bool workerthread) {
+void ThreadStart(ThreadState *thr, int tid, tid_t os_id, bool workerthread) {
   uptr stk_addr = 0;
   uptr stk_size = 0;
   uptr tls_addr = 0;
@@ -248,19 +252,7 @@
     if (stk_addr && stk_size)
       MemoryRangeImitateWrite(thr, /*pc=*/ 1, stk_addr, stk_size);
 
-    if (tls_addr && tls_size) {
-      // Check that the thr object is in tls;
-      const uptr thr_beg = (uptr)thr;
-      const uptr thr_end = (uptr)thr + sizeof(*thr);
-      CHECK_GE(thr_beg, tls_addr);
-      CHECK_LE(thr_beg, tls_addr + tls_size);
-      CHECK_GE(thr_end, tls_addr);
-      CHECK_LE(thr_end, tls_addr + tls_size);
-      // Since the thr object is huge, skip it.
-      MemoryRangeImitateWrite(thr, /*pc=*/ 2, tls_addr, thr_beg - tls_addr);
-      MemoryRangeImitateWrite(thr, /*pc=*/ 2,
-          thr_end, tls_addr + tls_size - thr_end);
-    }
+    if (tls_addr && tls_size) ImitateTlsWrite(thr, tls_addr, tls_size);
   }
 #endif
 
@@ -357,6 +349,7 @@
   StatInc(thr, StatMopRange);
 
   if (*shadow_mem == kShadowRodata) {
+    DCHECK(!is_write);
     // Access to .rodata section, no races here.
     // Measurements show that it can be 10-20% of all memory accesses.
     StatInc(thr, StatMopRangeRodata);
diff --git a/lib/tsan/rtl/tsan_stat.cc b/lib/tsan/rtl/tsan_stat.cc
index d1d6ed2..18c83d5 100644
--- a/lib/tsan/rtl/tsan_stat.cc
+++ b/lib/tsan/rtl/tsan_stat.cc
@@ -75,14 +75,11 @@
   name[StatClockAcquire]                 = "Clock acquire                     ";
   name[StatClockAcquireEmpty]            = "  empty clock                     ";
   name[StatClockAcquireFastRelease]      = "  fast from release-store         ";
-  name[StatClockAcquireLarge]            = "  contains my tid                 ";
-  name[StatClockAcquireRepeat]           = "  repeated (fast)                 ";
   name[StatClockAcquireFull]             = "  full (slow)                     ";
   name[StatClockAcquiredSomething]       = "  acquired something              ";
   name[StatClockRelease]                 = "Clock release                     ";
   name[StatClockReleaseResize]           = "  resize                          ";
-  name[StatClockReleaseFast1]            = "  fast1                           ";
-  name[StatClockReleaseFast2]            = "  fast2                           ";
+  name[StatClockReleaseFast]             = "  fast                            ";
   name[StatClockReleaseSlow]             = "  dirty overflow (slow)           ";
   name[StatClockReleaseFull]             = "  full (slow)                     ";
   name[StatClockReleaseAcquired]         = "  was acquired                    ";
@@ -153,6 +150,16 @@
   name[StatAnnotatePublishMemoryRange]   = "  PublishMemoryRange              ";
   name[StatAnnotateUnpublishMemoryRange] = "  UnpublishMemoryRange            ";
   name[StatAnnotateThreadName]           = "  ThreadName                      ";
+  name[Stat__tsan_mutex_create]          = "  __tsan_mutex_create             ";
+  name[Stat__tsan_mutex_destroy]         = "  __tsan_mutex_destroy            ";
+  name[Stat__tsan_mutex_pre_lock]        = "  __tsan_mutex_pre_lock           ";
+  name[Stat__tsan_mutex_post_lock]       = "  __tsan_mutex_post_lock          ";
+  name[Stat__tsan_mutex_pre_unlock]      = "  __tsan_mutex_pre_unlock         ";
+  name[Stat__tsan_mutex_post_unlock]     = "  __tsan_mutex_post_unlock        ";
+  name[Stat__tsan_mutex_pre_signal]      = "  __tsan_mutex_pre_signal         ";
+  name[Stat__tsan_mutex_post_signal]     = "  __tsan_mutex_post_signal        ";
+  name[Stat__tsan_mutex_pre_divert]      = "  __tsan_mutex_pre_divert         ";
+  name[Stat__tsan_mutex_post_divert]     = "  __tsan_mutex_post_divert        ";
 
   name[StatMtxTotal]                     = "Contentionz                       ";
   name[StatMtxTrace]                     = "  Trace                           ";
diff --git a/lib/tsan/rtl/tsan_stat.h b/lib/tsan/rtl/tsan_stat.h
index 8447dd8..42d6a2b 100644
--- a/lib/tsan/rtl/tsan_stat.h
+++ b/lib/tsan/rtl/tsan_stat.h
@@ -74,15 +74,12 @@
   StatClockAcquire,
   StatClockAcquireEmpty,
   StatClockAcquireFastRelease,
-  StatClockAcquireLarge,
-  StatClockAcquireRepeat,
   StatClockAcquireFull,
   StatClockAcquiredSomething,
   // Clocks - release.
   StatClockRelease,
   StatClockReleaseResize,
-  StatClockReleaseFast1,
-  StatClockReleaseFast2,
+  StatClockReleaseFast,
   StatClockReleaseSlow,
   StatClockReleaseFull,
   StatClockReleaseAcquired,
@@ -157,6 +154,16 @@
   StatAnnotatePublishMemoryRange,
   StatAnnotateUnpublishMemoryRange,
   StatAnnotateThreadName,
+  Stat__tsan_mutex_create,
+  Stat__tsan_mutex_destroy,
+  Stat__tsan_mutex_pre_lock,
+  Stat__tsan_mutex_post_lock,
+  Stat__tsan_mutex_pre_unlock,
+  Stat__tsan_mutex_post_unlock,
+  Stat__tsan_mutex_pre_signal,
+  Stat__tsan_mutex_post_signal,
+  Stat__tsan_mutex_pre_divert,
+  Stat__tsan_mutex_post_divert,
 
   // Internal mutex contentionz.
   StatMtxTotal,
diff --git a/lib/tsan/rtl/tsan_suppressions.cc b/lib/tsan/rtl/tsan_suppressions.cc
index a8abd93..e39702b 100644
--- a/lib/tsan/rtl/tsan_suppressions.cc
+++ b/lib/tsan/rtl/tsan_suppressions.cc
@@ -76,8 +76,6 @@
     return kSuppressionRace;
   else if (typ == ReportTypeExternalRace)
     return kSuppressionRace;
-  else if (typ == ReportTypeSwiftAccessRace)
-    return kSuppressionRace;
   else if (typ == ReportTypeThreadLeak)
     return kSuppressionThread;
   else if (typ == ReportTypeMutexDestroyLocked)
diff --git a/lib/tsan/rtl/tsan_sync.cc b/lib/tsan/rtl/tsan_sync.cc
index 2be0474..44ae558 100644
--- a/lib/tsan/rtl/tsan_sync.cc
+++ b/lib/tsan/rtl/tsan_sync.cc
@@ -42,10 +42,7 @@
   owner_tid = kInvalidTid;
   last_lock = 0;
   recursion = 0;
-  is_rw = 0;
-  is_recursive = 0;
-  is_broken = 0;
-  is_linker_init = 0;
+  atomic_store_relaxed(&flags, 0);
 
   if (proc == 0) {
     CHECK_EQ(clock.size(), 0);
@@ -56,7 +53,9 @@
   }
 }
 
-MetaMap::MetaMap() {
+MetaMap::MetaMap()
+    : block_alloc_("heap block allocator")
+    , sync_alloc_("sync allocator") {
   atomic_store(&uid_gen_, 0, memory_order_relaxed);
 }
 
diff --git a/lib/tsan/rtl/tsan_sync.h b/lib/tsan/rtl/tsan_sync.h
index 86e6bbd..b83c09f 100644
--- a/lib/tsan/rtl/tsan_sync.h
+++ b/lib/tsan/rtl/tsan_sync.h
@@ -23,6 +23,29 @@
 
 namespace __tsan {
 
+// These need to match __tsan_mutex_* flags defined in tsan_interface.h.
+// See documentation there as well.
+enum MutexFlags {
+  MutexFlagLinkerInit          = 1 << 0, // __tsan_mutex_linker_init
+  MutexFlagWriteReentrant      = 1 << 1, // __tsan_mutex_write_reentrant
+  MutexFlagReadReentrant       = 1 << 2, // __tsan_mutex_read_reentrant
+  MutexFlagReadLock            = 1 << 3, // __tsan_mutex_read_lock
+  MutexFlagTryLock             = 1 << 4, // __tsan_mutex_try_lock
+  MutexFlagTryLockFailed       = 1 << 5, // __tsan_mutex_try_lock_failed
+  MutexFlagRecursiveLock       = 1 << 6, // __tsan_mutex_recursive_lock
+  MutexFlagRecursiveUnlock     = 1 << 7, // __tsan_mutex_recursive_unlock
+
+  // The following flags are runtime private.
+  // Mutex API misuse was detected, so don't report any more.
+  MutexFlagBroken              = 1 << 30,
+  // We did not intercept pre lock event, so handle it on post lock.
+  MutexFlagDoPreLockOnPostLock = 1 << 29,
+  // Must list all mutex creation flags.
+  MutexCreationFlagMask        = MutexFlagLinkerInit |
+                                 MutexFlagWriteReentrant |
+                                 MutexFlagReadReentrant,
+};
+
 struct SyncVar {
   SyncVar();
 
@@ -35,10 +58,7 @@
   int owner_tid;  // Set only by exclusive owners.
   u64 last_lock;
   int recursion;
-  bool is_rw;
-  bool is_recursive;
-  bool is_broken;
-  bool is_linker_init;
+  atomic_uint32_t flags;
   u32 next;  // in MetaMap
   DDMutex dd;
   SyncClock read_clock;  // Used for rw mutexes only.
@@ -61,6 +81,26 @@
     *uid = id >> 48;
     return (uptr)GetLsb(id, 48);
   }
+
+  bool IsFlagSet(u32 f) const {
+    return atomic_load_relaxed(&flags) & f;
+  }
+
+  void SetFlags(u32 f) {
+    atomic_store_relaxed(&flags, atomic_load_relaxed(&flags) | f);
+  }
+
+  void UpdateFlags(u32 flagz) {
+    // Filter out operation flags.
+    if (!(flagz & MutexCreationFlagMask))
+      return;
+    u32 current = atomic_load_relaxed(&flags);
+    if (current & MutexCreationFlagMask)
+      return;
+    // Note: this can be called from MutexPostReadLock which holds only read
+    // lock on the SyncVar.
+    atomic_store_relaxed(&flags, current | (flagz & MutexCreationFlagMask));
+  }
 };
 
 /* MetaMap allows to map arbitrary user pointers onto various descriptors.
diff --git a/lib/tsan/tests/CMakeLists.txt b/lib/tsan/tests/CMakeLists.txt
index 87e1417..f8aec68 100644
--- a/lib/tsan/tests/CMakeLists.txt
+++ b/lib/tsan/tests/CMakeLists.txt
@@ -8,12 +8,14 @@
   ${TSAN_CFLAGS}
   ${COMPILER_RT_UNITTEST_CFLAGS}
   ${COMPILER_RT_GTEST_CFLAGS}
+  -I${COMPILER_RT_SOURCE_DIR}/include
   -I${COMPILER_RT_SOURCE_DIR}/lib
   -I${COMPILER_RT_SOURCE_DIR}/lib/tsan/rtl
   -DGTEST_HAS_RTTI=0)
 
 if(APPLE)
   list(APPEND TSAN_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS})
+  list(APPEND TSAN_UNITTEST_LINKFLAGS ${DARWIN_osx_LINKFLAGS})
 endif()
 
 set(TSAN_RTL_HEADERS)
diff --git a/lib/tsan/tests/rtl/tsan_posix.cc b/lib/tsan/tests/rtl/tsan_posix.cc
index 9c0e013..e66dab6 100644
--- a/lib/tsan/tests/rtl/tsan_posix.cc
+++ b/lib/tsan/tests/rtl/tsan_posix.cc
@@ -94,8 +94,9 @@
 // The test is failing with high thread count for aarch64.
 // FIXME: track down the issue and re-enable the test.
 // On Darwin, we're running unit tests without interceptors and __thread is
-// using malloc and free, which causes false data race reports.
-#if !defined(__aarch64__) && !defined(__APPLE__)
+// using malloc and free, which causes false data race reports.  On rare
+// occasions on powerpc64le this test also fails.
+#if !defined(__aarch64__) && !defined(__APPLE__) && !defined(powerpc64le)
   local_thread((void*)2);
 #endif
 }
diff --git a/lib/tsan/tests/unit/tsan_clock_test.cc b/lib/tsan/tests/unit/tsan_clock_test.cc
index 83e25fb..f6230e1 100644
--- a/lib/tsan/tests/unit/tsan_clock_test.cc
+++ b/lib/tsan/tests/unit/tsan_clock_test.cc
@@ -26,13 +26,13 @@
   clk.tick();
   ASSERT_EQ(clk.size(), 1U);
   ASSERT_EQ(clk.get(0), 1U);
-  clk.set(3, clk.get(3) + 1);
+  clk.set(&cache, 3, clk.get(3) + 1);
   ASSERT_EQ(clk.size(), 4U);
   ASSERT_EQ(clk.get(0), 1U);
   ASSERT_EQ(clk.get(1), 0U);
   ASSERT_EQ(clk.get(2), 0U);
   ASSERT_EQ(clk.get(3), 1U);
-  clk.set(3, clk.get(3) + 1);
+  clk.set(&cache, 3, clk.get(3) + 1);
   ASSERT_EQ(clk.get(3), 2U);
 }
 
@@ -53,6 +53,31 @@
   chunked.Reset(&cache);
 }
 
+static const uptr interesting_sizes[] = {0, 1, 2, 30, 61, 62, 63, 64, 65, 66,
+    100, 124, 125, 126, 127, 128, 129, 130, 188, 189, 190, 191, 192, 193, 254,
+    255};
+
+TEST(Clock, Iter) {
+  const uptr n = ARRAY_SIZE(interesting_sizes);
+  for (uptr fi = 0; fi < n; fi++) {
+    const uptr size = interesting_sizes[fi];
+    SyncClock sync;
+    ThreadClock vector(0);
+    for (uptr i = 0; i < size; i++)
+      vector.set(&cache, i, i + 1);
+    if (size != 0)
+      vector.release(&cache, &sync);
+    uptr i = 0;
+    for (ClockElem &ce : sync) {
+      ASSERT_LT(i, size);
+      ASSERT_EQ(sync.get_clean(i), ce.epoch);
+      i++;
+    }
+    ASSERT_EQ(i, size);
+    sync.Reset(&cache);
+  }
+}
+
 TEST(Clock, AcquireRelease) {
   ThreadClock vector1(100);
   vector1.tick();
@@ -86,24 +111,26 @@
 
 TEST(Clock, ManyThreads) {
   SyncClock chunked;
-  for (unsigned i = 0; i < 100; i++) {
+  for (unsigned i = 0; i < 200; i++) {
     ThreadClock vector(0);
     vector.tick();
-    vector.set(i, 1);
+    vector.set(&cache, i, i + 1);
     vector.release(&cache, &chunked);
     ASSERT_EQ(i + 1, chunked.size());
     vector.acquire(&cache, &chunked);
     ASSERT_EQ(i + 1, vector.size());
   }
 
-  for (unsigned i = 0; i < 100; i++)
-    ASSERT_EQ(1U, chunked.get(i));
+  for (unsigned i = 0; i < 200; i++) {
+    printf("i=%d\n", i);
+    ASSERT_EQ(i + 1, chunked.get(i));
+  }
 
   ThreadClock vector(1);
   vector.acquire(&cache, &chunked);
-  ASSERT_EQ(100U, vector.size());
-  for (unsigned i = 0; i < 100; i++)
-    ASSERT_EQ(1U, vector.get(i));
+  ASSERT_EQ(200U, vector.size());
+  for (unsigned i = 0; i < 200; i++)
+    ASSERT_EQ(i + 1, vector.get(i));
 
   chunked.Reset(&cache);
 }
@@ -151,7 +178,7 @@
   {
     ThreadClock vector(10);
     vector.tick();
-    vector.set(5, 42);
+    vector.set(&cache, 5, 42);
     SyncClock sync;
     vector.release(&cache, &sync);
     ASSERT_EQ(sync.size(), 11U);
@@ -180,8 +207,8 @@
   {
     ThreadClock vector(100);
     vector.tick();
-    vector.set(5, 42);
-    vector.set(90, 84);
+    vector.set(&cache, 5, 42);
+    vector.set(&cache, 90, 84);
     SyncClock sync;
     vector.release(&cache, &sync);
     ASSERT_EQ(sync.size(), 101U);
@@ -212,6 +239,40 @@
   }
 }
 
+TEST(Clock, Growth2) {
+  // Test clock growth for every pair of sizes:
+  const uptr n = ARRAY_SIZE(interesting_sizes);
+  for (uptr fi = 0; fi < n; fi++) {
+    for (uptr ti = fi + 1; ti < n; ti++) {
+      const uptr from = interesting_sizes[fi];
+      const uptr to = interesting_sizes[ti];
+      SyncClock sync;
+      ThreadClock vector(0);
+      for (uptr i = 0; i < from; i++)
+        vector.set(&cache, i, i + 1);
+      if (from != 0)
+        vector.release(&cache, &sync);
+      ASSERT_EQ(sync.size(), from);
+      for (uptr i = 0; i < from; i++)
+        ASSERT_EQ(sync.get(i), i + 1);
+      for (uptr i = 0; i < to; i++)
+        vector.set(&cache, i, i + 1);
+      vector.release(&cache, &sync);
+      ASSERT_EQ(sync.size(), to);
+      for (uptr i = 0; i < to; i++)
+        ASSERT_EQ(sync.get(i), i + 1);
+      vector.set(&cache, to + 1, to + 1);
+      vector.release(&cache, &sync);
+      ASSERT_EQ(sync.size(), to + 2);
+      for (uptr i = 0; i < to; i++)
+        ASSERT_EQ(sync.get(i), i + 1);
+      ASSERT_EQ(sync.get(to), 0U);
+      ASSERT_EQ(sync.get(to + 1), to + 1);
+      sync.Reset(&cache);
+    }
+  }
+}
+
 const uptr kThreads = 4;
 const uptr kClocks = 4;
 
diff --git a/lib/ubsan/CMakeLists.txt b/lib/ubsan/CMakeLists.txt
index 9bb36ed..457a6b4 100644
--- a/lib/ubsan/CMakeLists.txt
+++ b/lib/ubsan/CMakeLists.txt
@@ -9,6 +9,7 @@
   )
 
 set(UBSAN_STANDALONE_SOURCES
+  ubsan_diag_standalone.cc
   ubsan_init_standalone.cc
   )
 
@@ -33,6 +34,10 @@
 append_rtti_flag(ON UBSAN_CXXFLAGS)
 append_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_CXXFLAGS)
 
+append_list_if(COMPILER_RT_HAS_LIBDL dl UBSAN_DYNAMIC_LIBS)
+append_list_if(COMPILER_RT_HAS_LIBRT rt UBSAN_DYNAMIC_LIBS)
+append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread UBSAN_DYNAMIC_LIBS)
+
 add_compiler_rt_component(ubsan)
 
 if(APPLE)
@@ -90,6 +95,35 @@
     ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}
     SOURCES ${UBSAN_CXX_SOURCES} CFLAGS ${UBSAN_CXXFLAGS})
 
+  if (WIN32)
+    add_compiler_rt_object_libraries(UbsanWeakInterception
+      ${SANITIZER_COMMON_SUPPORTED_OS}
+      ARCHS ${UBSAN_SUPPORTED_ARCH}
+      SOURCES ubsan_win_weak_interception.cc
+      CFLAGS ${UBSAN_CFLAGS} -DSANITIZER_DYNAMIC
+      DEFS ${UBSAN_COMMON_DEFINITIONS})
+
+    add_compiler_rt_object_libraries(UbsanDllThunk
+      ${SANITIZER_COMMON_SUPPORTED_OS}
+      ARCHS ${UBSAN_SUPPORTED_ARCH}
+      SOURCES ubsan_win_dll_thunk.cc
+      CFLAGS ${UBSAN_CFLAGS} -DSANITIZER_DLL_THUNK
+      DEFS ${UBSAN_COMMON_DEFINITIONS})
+
+    set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK")
+    if(MSVC)
+      list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl")
+    elseif(CMAKE_C_COMPILER_ID MATCHES Clang)
+      list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs")
+    endif()
+    add_compiler_rt_object_libraries(UbsanDynamicRuntimeThunk
+      ${SANITIZER_COMMON_SUPPORTED_OS}
+      ARCHS ${UBSAN_SUPPORTED_ARCH}
+      SOURCES ubsan_win_dynamic_runtime_thunk.cc
+      CFLAGS ${UBSAN_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
+      DEFS ${UBSAN_COMMON_DEFINITIONS})
+  endif()
+
   if(COMPILER_RT_HAS_UBSAN)
     # Initializer of standalone UBSan runtime.
     add_compiler_rt_object_libraries(RTUbsan_standalone
@@ -114,6 +148,27 @@
       CFLAGS ${UBSAN_CXXFLAGS}
       PARENT_TARGET ubsan)
 
+    add_compiler_rt_runtime(clang_rt.ubsan_standalone
+      SHARED
+      ARCHS ${UBSAN_SUPPORTED_ARCH}
+      OBJECT_LIBS RTSanitizerCommon
+              RTSanitizerCommonLibc
+              RTUbsan
+      CFLAGS ${UBSAN_CFLAGS}
+      LINK_LIBS ${UBSAN_DYNAMIC_LIBS}
+      PARENT_TARGET ubsan)
+
+    add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx
+      SHARED
+      ARCHS ${UBSAN_SUPPORTED_ARCH}
+      OBJECT_LIBS RTSanitizerCommon
+              RTSanitizerCommonLibc
+              RTUbsan
+              RTUbsan_cxx
+      CFLAGS ${UBSAN_CXXFLAGS}
+      LINK_LIBS ${UBSAN_DYNAMIC_LIBS}
+      PARENT_TARGET ubsan)
+
     if (UNIX)
       set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH})
       list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386 i686)
diff --git a/lib/ubsan/ubsan_checks.inc b/lib/ubsan/ubsan_checks.inc
index 0a87e6e..73c6936 100644
--- a/lib/ubsan/ubsan_checks.inc
+++ b/lib/ubsan/ubsan_checks.inc
@@ -29,6 +29,7 @@
 UBSAN_CHECK(IntegerDivideByZero, "integer-divide-by-zero",
             "integer-divide-by-zero")
 UBSAN_CHECK(FloatDivideByZero, "float-divide-by-zero", "float-divide-by-zero")
+UBSAN_CHECK(InvalidBuiltin, "invalid-builtin-use", "invalid-builtin-use")
 UBSAN_CHECK(InvalidShiftBase, "invalid-shift-base", "shift-base")
 UBSAN_CHECK(InvalidShiftExponent, "invalid-shift-exponent", "shift-exponent")
 UBSAN_CHECK(OutOfBoundsIndex, "out-of-bounds-index", "bounds")
diff --git a/lib/ubsan/ubsan_diag_standalone.cc b/lib/ubsan/ubsan_diag_standalone.cc
new file mode 100644
index 0000000..df8ed5f
--- /dev/null
+++ b/lib/ubsan/ubsan_diag_standalone.cc
@@ -0,0 +1,37 @@
+//===-- ubsan_diag_standalone.cc ------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Diagnostic reporting for the standalone UBSan runtime.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ubsan_platform.h"
+#if CAN_SANITIZE_UB
+#include "ubsan_diag.h"
+
+using namespace __ubsan;
+
+extern "C" {
+SANITIZER_INTERFACE_ATTRIBUTE
+void __sanitizer_print_stack_trace() {
+  uptr top = 0;
+  uptr bottom = 0;
+  bool request_fast_unwind = common_flags()->fast_unwind_on_fatal;
+  if (request_fast_unwind)
+    __sanitizer::GetThreadStackTopAndBottom(false, &top, &bottom);
+
+  GET_REPORT_OPTIONS(false);
+  BufferedStackTrace stack;
+  stack.Unwind(kStackTraceMax, Opts.pc, Opts.bp, nullptr, top, bottom,
+               request_fast_unwind);
+  stack.Print();
+}
+} // extern "C"
+
+#endif  // CAN_SANITIZE_UB
diff --git a/lib/ubsan/ubsan_flags.cc b/lib/ubsan/ubsan_flags.cc
index 21e2884..8e1f408 100644
--- a/lib/ubsan/ubsan_flags.cc
+++ b/lib/ubsan/ubsan_flags.cc
@@ -68,22 +68,8 @@
 
 }  // namespace __ubsan
 
-extern "C" {
-
-#if !SANITIZER_SUPPORTS_WEAK_HOOKS
-SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
-const char *__ubsan_default_options() { return ""; }
-#endif
-
-#if SANITIZER_WINDOWS
-const char *__ubsan_default_default_options() { return ""; }
-# ifdef _WIN64
-#  pragma comment(linker, "/alternatename:__ubsan_default_options=__ubsan_default_default_options")
-# else
-#  pragma comment(linker, "/alternatename:___ubsan_default_options=___ubsan_default_default_options")
-# endif
-#endif
-
-}  // extern "C"
+SANITIZER_INTERFACE_WEAK_DEF(const char *, __ubsan_default_options, void) {
+  return "";
+}
 
 #endif  // CAN_SANITIZE_UB
diff --git a/lib/ubsan/ubsan_handlers.cc b/lib/ubsan/ubsan_handlers.cc
index 75a4490..06438a5 100644
--- a/lib/ubsan/ubsan_handlers.cc
+++ b/lib/ubsan/ubsan_handlers.cc
@@ -437,6 +437,30 @@
   Die();
 }
 
+static void handleInvalidBuiltin(InvalidBuiltinData *Data, ReportOptions Opts) {
+  SourceLocation Loc = Data->Loc.acquire();
+  ErrorType ET = ErrorType::InvalidBuiltin;
+
+  if (ignoreReport(Loc, Opts, ET))
+    return;
+
+  ScopedReport R(Opts, Loc, ET);
+
+  Diag(Loc, DL_Error,
+       "passing zero to %0, which is not a valid argument")
+    << ((Data->Kind == BCK_CTZPassedZero) ? "ctz()" : "clz()");
+}
+
+void __ubsan::__ubsan_handle_invalid_builtin(InvalidBuiltinData *Data) {
+  GET_REPORT_OPTIONS(true);
+  handleInvalidBuiltin(Data, Opts);
+}
+void __ubsan::__ubsan_handle_invalid_builtin_abort(InvalidBuiltinData *Data) {
+  GET_REPORT_OPTIONS(true);
+  handleInvalidBuiltin(Data, Opts);
+  Die();
+}
+
 static void handleFunctionTypeMismatch(FunctionTypeMismatchData *Data,
                                        ValueHandle Function,
                                        ReportOptions Opts) {
diff --git a/lib/ubsan/ubsan_handlers.h b/lib/ubsan/ubsan_handlers.h
index 796321b..5a9e902 100644
--- a/lib/ubsan/ubsan_handlers.h
+++ b/lib/ubsan/ubsan_handlers.h
@@ -122,6 +122,21 @@
 /// \brief Handle a load of an invalid value for the type.
 RECOVERABLE(load_invalid_value, InvalidValueData *Data, ValueHandle Val)
 
+/// Known builtin check kinds.
+/// Keep in sync with the enum of the same name in CodeGenFunction.h
+enum BuiltinCheckKind : unsigned char {
+  BCK_CTZPassedZero,
+  BCK_CLZPassedZero,
+};
+
+struct InvalidBuiltinData {
+  SourceLocation Loc;
+  unsigned char Kind;
+};
+
+/// Handle a builtin called in an invalid way.
+RECOVERABLE(invalid_builtin, InvalidBuiltinData *Data)
+
 struct FunctionTypeMismatchData {
   SourceLocation Loc;
   const TypeDescriptor &Type;
diff --git a/lib/ubsan/ubsan_interface.inc b/lib/ubsan/ubsan_interface.inc
index a69ca57..4c8f92e 100644
--- a/lib/ubsan/ubsan_interface.inc
+++ b/lib/ubsan/ubsan_interface.inc
@@ -19,6 +19,8 @@
 INTERFACE_FUNCTION(__ubsan_handle_float_cast_overflow_abort)
 INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch)
 INTERFACE_FUNCTION(__ubsan_handle_function_type_mismatch_abort)
+INTERFACE_FUNCTION(__ubsan_handle_invalid_builtin)
+INTERFACE_FUNCTION(__ubsan_handle_invalid_builtin_abort)
 INTERFACE_FUNCTION(__ubsan_handle_load_invalid_value)
 INTERFACE_FUNCTION(__ubsan_handle_load_invalid_value_abort)
 INTERFACE_FUNCTION(__ubsan_handle_missing_return)
diff --git a/lib/ubsan/ubsan_win_dll_thunk.cc b/lib/ubsan/ubsan_win_dll_thunk.cc
new file mode 100644
index 0000000..a1d0dbd
--- /dev/null
+++ b/lib/ubsan/ubsan_win_dll_thunk.cc
@@ -0,0 +1,21 @@
+//===-- ubsan_win_dll_thunk.cc --------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines a family of thunks that should be statically linked into
+// the DLLs that have instrumentation in order to delegate the calls to the
+// shared runtime that lives in the main binary.
+// See https://github.com/google/sanitizers/issues/209 for the details.
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DLL_THUNK
+#include "sanitizer_common/sanitizer_win_dll_thunk.h"
+// Ubsan interface functions.
+#define INTERFACE_FUNCTION(Name) INTERCEPT_SANITIZER_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "ubsan_interface.inc"
+#endif // SANITIZER_DLL_THUNK
diff --git a/lib/ubsan/ubsan_win_dynamic_runtime_thunk.cc b/lib/ubsan/ubsan_win_dynamic_runtime_thunk.cc
new file mode 100644
index 0000000..c9b74a4
--- /dev/null
+++ b/lib/ubsan/ubsan_win_dynamic_runtime_thunk.cc
@@ -0,0 +1,21 @@
+//===-- ubsan_win_dynamic_runtime_thunk.cc --------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines things that need to be present in the application modules
+// to interact with Ubsan, when it is included in a dll.
+//
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DYNAMIC_RUNTIME_THUNK
+#define SANITIZER_IMPORT_INTERFACE 1
+#include "sanitizer_common/sanitizer_win_defs.h"
+// Define weak alias for all weak functions imported from ubsan.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) WIN_WEAK_IMPORT_DEF(Name)
+#include "ubsan_interface.inc"
+#endif // SANITIZER_DYNAMIC_RUNTIME_THUNK
diff --git a/lib/ubsan/ubsan_win_weak_interception.cc b/lib/ubsan/ubsan_win_weak_interception.cc
new file mode 100644
index 0000000..353719e
--- /dev/null
+++ b/lib/ubsan/ubsan_win_weak_interception.cc
@@ -0,0 +1,23 @@
+//===-- ubsan_win_weak_interception.cc ------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This module should be included in Ubsan when it is implemented as a shared
+// library on Windows (dll), in order to delegate the calls of weak functions to
+// the implementation in the main executable when a strong definition is
+// provided.
+//===----------------------------------------------------------------------===//
+#ifdef SANITIZER_DYNAMIC
+#include "sanitizer_common/sanitizer_win_weak_interception.h"
+#include "ubsan_flags.h"
+// Check if strong definitions for weak functions are present in the main
+// executable. If that is the case, override dll functions to point to strong
+// implementations.
+#define INTERFACE_FUNCTION(Name)
+#define INTERFACE_WEAK_FUNCTION(Name) INTERCEPT_SANITIZER_WEAK_FUNCTION(Name)
+#include "ubsan_interface.inc"
+#endif // SANITIZER_DYNAMIC
diff --git a/lib/xray/CMakeLists.txt b/lib/xray/CMakeLists.txt
index 9c7cf6c..72caa9f 100644
--- a/lib/xray/CMakeLists.txt
+++ b/lib/xray/CMakeLists.txt
@@ -1,15 +1,15 @@
 # Build for the XRay runtime support library.
 
-# Core XRay runtime library implementation files.
+# XRay runtime library implementation files.
 set(XRAY_SOURCES
+  xray_inmemory_log.cc
   xray_init.cc
-  xray_interface.cc
   xray_flags.cc
-  xray_inmemory_log.cc)
-
-# XRay flight data recorder (FDR) implementation files.
-set(XRAY_FDR_SOURCES
-  xray_buffer_queue.cc)
+  xray_interface.cc
+  xray_buffer_queue.cc
+  xray_log_interface.cc
+  xray_fdr_logging.cc
+  xray_utils.cc)
 
 set(x86_64_SOURCES
     xray_x86_64.cc
@@ -21,11 +21,38 @@
     xray_trampoline_arm.S
     ${XRAY_SOURCES})
 
-set(armhf_SOURCES ${arm_SOURCES})
+set(armhf_SOURCES
+  ${arm_SOURCES})
 
 set(aarch64_SOURCES
-        xray_AArch64.cc
-        xray_trampoline_AArch64.S
+  xray_AArch64.cc
+  xray_trampoline_AArch64.S
+  ${XRAY_SOURCES})
+
+set(mips_SOURCES
+    xray_mips.cc
+    xray_trampoline_mips.S
+    ${XRAY_SOURCES})
+
+set(mipsel_SOURCES
+    xray_mips.cc
+    xray_trampoline_mips.S
+    ${XRAY_SOURCES})
+
+set(mips64_SOURCES
+    xray_mips64.cc
+    xray_trampoline_mips64.S
+    ${XRAY_SOURCES})
+
+set(mips64el_SOURCES
+    xray_mips64.cc
+    xray_trampoline_mips64.S
+    ${XRAY_SOURCES})
+
+set(powerpc64le_SOURCES
+        xray_powerpc64.cc
+        xray_trampoline_powerpc64.cc
+        xray_trampoline_powerpc64_asm.S
         ${XRAY_SOURCES})
 
 include_directories(..)
@@ -41,13 +68,7 @@
   SOURCES ${XRAY_SOURCES} CFLAGS ${XRAY_CFLAGS}
   DEFS ${XRAY_COMMON_DEFINITIONS})
 
-add_compiler_rt_object_libraries(RTXrayFDR
-  ARCHS ${XRAY_SUPPORTED_ARCH}
-  SOURCES ${XRAY_FDR_SOURCES} CFLAGS ${XRAY_CFLAGS}
-  DEFS ${XRAY_COMMON_DEFINITIONS})
-
 add_compiler_rt_component(xray)
-add_compiler_rt_component(xray-fdr)
 
 set(XRAY_COMMON_RUNTIME_OBJECT_LIBS
     RTSanitizerCommon
@@ -63,14 +84,6 @@
      DEFS ${XRAY_COMMON_DEFINITIONS}
      OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS}
      PARENT_TARGET xray)
-   add_compiler_rt_runtime(clang_rt.xray-fdr
-     STATIC
-     ARCHS ${arch}
-     SOURCES ${XRAY_FDR_SOURCES}
-     CFLAGS ${XRAY_CFLAGS}
-     DEFS ${XRAY_COMMON_DEFINITIONS}
-     OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS}
-     PARENT_TARGET xray-fdr)
   endif()
 endforeach()
 
diff --git a/lib/xray/tests/CMakeLists.txt b/lib/xray/tests/CMakeLists.txt
index 6cb1793..a1eb4a0 100644
--- a/lib/xray/tests/CMakeLists.txt
+++ b/lib/xray/tests/CMakeLists.txt
@@ -8,14 +8,15 @@
   ${COMPILER_RT_UNITTEST_CFLAGS}
   ${COMPILER_RT_GTEST_CFLAGS}
   -I${COMPILER_RT_SOURCE_DIR}/include
-  -I${COMPILER_RT_SOURCE_DIR}/lib/xray)
+  -I${COMPILER_RT_SOURCE_DIR}/lib/xray
+  -I${COMPILER_RT_SOURCE_DIR}/lib)
 
 macro(xray_compile obj_list source arch)
   get_filename_component(basename ${source} NAME)
   set(output_obj "${basename}.${arch}.o")
   get_target_flags_for_arch(${arch} TARGET_CFLAGS)
   if(NOT COMPILER_RT_STANDALONE_BUILD)
-    list(APPEND COMPILE_DEPS gtest_main xray-fdr)
+    list(APPEND COMPILE_DEPS gtest_main xray)
   endif()
   clang_compile(${output_obj} ${source}
     CFLAGS ${XRAY_UNITTEST_CFLAGS} ${TARGET_CFLAGS}
@@ -38,16 +39,17 @@
       get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)
       set(TEST_DEPS ${TEST_OBJECTS})
       if(NOT COMPILER_RT_STANDALONE_BUILD)
-        list(APPEND TEST_DEPS gtest_main xray-fdr)
+        list(APPEND TEST_DEPS gtest_main xray)
       endif()
       if(NOT APPLE)
-        add_compiler_rt_test(XRayUnitTests ${testname}
+        add_compiler_rt_test(XRayUnitTests ${testname}-${arch}
           OBJECTS ${TEST_OBJECTS}
           DEPS ${TEST_DEPS}
           LINK_FLAGS ${TARGET_LINK_FLAGS}
           -lstdc++ -lm ${CMAKE_THREAD_LIBS_INIT}
           -lpthread
-          -L${COMPILER_RT_LIBRARY_OUTPUT_DIR} -lclang_rt.xray-fdr-${arch})
+          -L${COMPILER_RT_LIBRARY_OUTPUT_DIR} -lclang_rt.xray-${arch}
+          -ldl -lrt)
       endif()
       # FIXME: Figure out how to run even just the unit tests on APPLE.
     endforeach()
diff --git a/lib/xray/tests/unit/CMakeLists.txt b/lib/xray/tests/unit/CMakeLists.txt
index 3e5412d..62d01f2 100644
--- a/lib/xray/tests/unit/CMakeLists.txt
+++ b/lib/xray/tests/unit/CMakeLists.txt
@@ -1,2 +1,4 @@
 add_xray_unittest(XRayBufferQueueTest SOURCES
   buffer_queue_test.cc xray_unit_test_main.cc)
+add_xray_unittest(XRayFDRLoggingTest SOURCES
+  fdr_logging_test.cc xray_unit_test_main.cc)
diff --git a/lib/xray/tests/unit/buffer_queue_test.cc b/lib/xray/tests/unit/buffer_queue_test.cc
index d46f194..ac89a8d 100644
--- a/lib/xray/tests/unit/buffer_queue_test.cc
+++ b/lib/xray/tests/unit/buffer_queue_test.cc
@@ -14,68 +14,101 @@
 #include "gtest/gtest.h"
 
 #include <future>
-#include <system_error>
 #include <unistd.h>
 
 namespace __xray {
 
 static constexpr size_t kSize = 4096;
 
-TEST(BufferQueueTest, API) { BufferQueue Buffers(kSize, 1); }
+TEST(BufferQueueTest, API) {
+  bool Success = false;
+  BufferQueue Buffers(kSize, 1, Success);
+  ASSERT_TRUE(Success);
+}
 
 TEST(BufferQueueTest, GetAndRelease) {
-  BufferQueue Buffers(kSize, 1);
+  bool Success = false;
+  BufferQueue Buffers(kSize, 1, Success);
+  ASSERT_TRUE(Success);
   BufferQueue::Buffer Buf;
-  ASSERT_EQ(Buffers.getBuffer(Buf), std::error_code());
+  ASSERT_EQ(Buffers.getBuffer(Buf), BufferQueue::ErrorCode::Ok);
   ASSERT_NE(nullptr, Buf.Buffer);
-  ASSERT_EQ(Buffers.releaseBuffer(Buf), std::error_code());
+  ASSERT_EQ(Buffers.releaseBuffer(Buf), BufferQueue::ErrorCode::Ok);
   ASSERT_EQ(nullptr, Buf.Buffer);
 }
 
 TEST(BufferQueueTest, GetUntilFailed) {
-  BufferQueue Buffers(kSize, 1);
+  bool Success = false;
+  BufferQueue Buffers(kSize, 1, Success);
+  ASSERT_TRUE(Success);
   BufferQueue::Buffer Buf0;
-  EXPECT_EQ(Buffers.getBuffer(Buf0), std::error_code());
+  EXPECT_EQ(Buffers.getBuffer(Buf0), BufferQueue::ErrorCode::Ok);
   BufferQueue::Buffer Buf1;
-  EXPECT_EQ(std::errc::not_enough_memory, Buffers.getBuffer(Buf1));
-  EXPECT_EQ(Buffers.releaseBuffer(Buf0), std::error_code());
+  EXPECT_EQ(BufferQueue::ErrorCode::NotEnoughMemory, Buffers.getBuffer(Buf1));
+  EXPECT_EQ(Buffers.releaseBuffer(Buf0), BufferQueue::ErrorCode::Ok);
 }
 
 TEST(BufferQueueTest, ReleaseUnknown) {
-  BufferQueue Buffers(kSize, 1);
+  bool Success = false;
+  BufferQueue Buffers(kSize, 1, Success);
+  ASSERT_TRUE(Success);
   BufferQueue::Buffer Buf;
   Buf.Buffer = reinterpret_cast<void *>(0xdeadbeef);
   Buf.Size = kSize;
-  EXPECT_EQ(std::errc::argument_out_of_domain, Buffers.releaseBuffer(Buf));
+  EXPECT_EQ(BufferQueue::ErrorCode::UnrecognizedBuffer,
+            Buffers.releaseBuffer(Buf));
 }
 
 TEST(BufferQueueTest, ErrorsWhenFinalising) {
-  BufferQueue Buffers(kSize, 2);
+  bool Success = false;
+  BufferQueue Buffers(kSize, 2, Success);
+  ASSERT_TRUE(Success);
   BufferQueue::Buffer Buf;
-  ASSERT_EQ(Buffers.getBuffer(Buf), std::error_code());
+  ASSERT_EQ(Buffers.getBuffer(Buf), BufferQueue::ErrorCode::Ok);
   ASSERT_NE(nullptr, Buf.Buffer);
-  ASSERT_EQ(Buffers.finalize(), std::error_code());
+  ASSERT_EQ(Buffers.finalize(), BufferQueue::ErrorCode::Ok);
   BufferQueue::Buffer OtherBuf;
-  ASSERT_EQ(std::errc::state_not_recoverable, Buffers.getBuffer(OtherBuf));
-  ASSERT_EQ(std::errc::state_not_recoverable, Buffers.finalize());
-  ASSERT_EQ(Buffers.releaseBuffer(Buf), std::error_code());
+  ASSERT_EQ(BufferQueue::ErrorCode::AlreadyFinalized,
+            Buffers.getBuffer(OtherBuf));
+  ASSERT_EQ(BufferQueue::ErrorCode::AlreadyFinalized,
+            Buffers.finalize());
+  ASSERT_EQ(Buffers.releaseBuffer(Buf), BufferQueue::ErrorCode::Ok);
 }
 
 TEST(BufferQueueTest, MultiThreaded) {
-  BufferQueue Buffers(kSize, 100);
+  bool Success = false;
+  BufferQueue Buffers(kSize, 100, Success);
+  ASSERT_TRUE(Success);
   auto F = [&] {
     BufferQueue::Buffer B;
-    while (!Buffers.getBuffer(B)) {
+    while (true) {
+      auto EC = Buffers.getBuffer(B);
+      if (EC != BufferQueue::ErrorCode::Ok)
+        return;
       Buffers.releaseBuffer(B);
     }
   };
   auto T0 = std::async(std::launch::async, F);
   auto T1 = std::async(std::launch::async, F);
   auto T2 = std::async(std::launch::async, [&] {
-    while (!Buffers.finalize())
+    while (Buffers.finalize() != BufferQueue::ErrorCode::Ok)
       ;
   });
   F();
 }
 
+TEST(BufferQueueTest, Apply) {
+  bool Success = false;
+  BufferQueue Buffers(kSize, 10, Success);
+  ASSERT_TRUE(Success);
+  auto Count = 0;
+  BufferQueue::Buffer B;
+  for (int I = 0; I < 10; ++I) {
+    ASSERT_EQ(Buffers.getBuffer(B), BufferQueue::ErrorCode::Ok);
+    ASSERT_EQ(Buffers.releaseBuffer(B), BufferQueue::ErrorCode::Ok);
+  }
+  Buffers.apply([&](const BufferQueue::Buffer &B) { ++Count; });
+  ASSERT_EQ(Count, 10);
+}
+
 } // namespace __xray
diff --git a/lib/xray/tests/unit/fdr_logging_test.cc b/lib/xray/tests/unit/fdr_logging_test.cc
new file mode 100644
index 0000000..0d5e99a
--- /dev/null
+++ b/lib/xray/tests/unit/fdr_logging_test.cc
@@ -0,0 +1,127 @@
+//===-- fdr_logging_test.cc -----------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a function call tracing system.
+//
+//===----------------------------------------------------------------------===//
+#include "xray_fdr_logging.h"
+#include "gtest/gtest.h"
+
+#include <fcntl.h>
+#include <iostream>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <system_error>
+#include <unistd.h>
+
+#include "xray/xray_records.h"
+
+namespace __xray {
+namespace {
+
+constexpr auto kBufferSize = 16384;
+constexpr auto kBufferMax = 10;
+
+struct ScopedFileCloserAndDeleter {
+  explicit ScopedFileCloserAndDeleter(int Fd, const char *Filename)
+      : Fd(Fd), Filename(Filename) {}
+
+  ~ScopedFileCloserAndDeleter() {
+    if (Fd) {
+      close(Fd);
+      unlink(Filename);
+    }
+  }
+
+  int Fd;
+  const char *Filename;
+};
+
+TEST(FDRLoggingTest, Simple) {
+  FDRLoggingOptions Options;
+  Options.ReportErrors = true;
+  char TmpFilename[] = "fdr-logging-test.XXXXXX";
+  Options.Fd = mkstemp(TmpFilename);
+  ASSERT_NE(Options.Fd, -1);
+  ASSERT_EQ(fdrLoggingInit(kBufferSize, kBufferMax, &Options,
+                            sizeof(FDRLoggingOptions)),
+            XRayLogInitStatus::XRAY_LOG_INITIALIZED);
+  fdrLoggingHandleArg0(1, XRayEntryType::ENTRY);
+  fdrLoggingHandleArg0(1, XRayEntryType::EXIT);
+  ASSERT_EQ(fdrLoggingFinalize(), XRayLogInitStatus::XRAY_LOG_FINALIZED);
+  ASSERT_EQ(fdrLoggingFlush(), XRayLogFlushStatus::XRAY_LOG_FLUSHED);
+  ASSERT_EQ(fdrLoggingReset(), XRayLogInitStatus::XRAY_LOG_UNINITIALIZED);
+
+  // To do this properly, we have to close the file descriptor then re-open the
+  // file for reading this time.
+  ASSERT_EQ(close(Options.Fd), 0);
+  int Fd = open(TmpFilename, O_RDONLY);
+  ASSERT_NE(-1, Fd);
+  ScopedFileCloserAndDeleter Guard(Fd, TmpFilename);
+  auto Size = lseek(Fd, 0, SEEK_END);
+  ASSERT_NE(Size, 0);
+  // Map the file contents.
+  const char *Contents = static_cast<const char *>(
+      mmap(NULL, Size, PROT_READ, MAP_PRIVATE, Fd, 0));
+  ASSERT_NE(Contents, nullptr);
+
+  XRayFileHeader H;
+  memcpy(&H, Contents, sizeof(XRayFileHeader));
+  ASSERT_EQ(H.Version, 1);
+  ASSERT_EQ(H.Type, FileTypes::FDR_LOG);
+
+  // We require one buffer at least to have the "start of buffer" metadata
+  // record.
+  MetadataRecord MDR;
+  memcpy(&MDR, Contents + sizeof(XRayFileHeader), sizeof(MetadataRecord));
+  ASSERT_EQ(MDR.RecordKind, uint8_t(MetadataRecord::RecordKinds::NewBuffer));
+}
+
+TEST(FDRLoggingTest, Multiple) {
+  FDRLoggingOptions Options;
+  char TmpFilename[] = "fdr-logging-test.XXXXXX";
+  Options.Fd = mkstemp(TmpFilename);
+  ASSERT_NE(Options.Fd, -1);
+  ASSERT_EQ(fdrLoggingInit(kBufferSize, kBufferMax, &Options,
+                            sizeof(FDRLoggingOptions)),
+            XRayLogInitStatus::XRAY_LOG_INITIALIZED);
+  for (uint64_t I = 0; I < 100; ++I) {
+    fdrLoggingHandleArg0(1, XRayEntryType::ENTRY);
+    fdrLoggingHandleArg0(1, XRayEntryType::EXIT);
+  }
+  ASSERT_EQ(fdrLoggingFinalize(), XRayLogInitStatus::XRAY_LOG_FINALIZED);
+  ASSERT_EQ(fdrLoggingFlush(), XRayLogFlushStatus::XRAY_LOG_FLUSHED);
+  ASSERT_EQ(fdrLoggingReset(), XRayLogInitStatus::XRAY_LOG_UNINITIALIZED);
+
+  // To do this properly, we have to close the file descriptor then re-open the
+  // file for reading this time.
+  ASSERT_EQ(close(Options.Fd), 0);
+  int Fd = open(TmpFilename, O_RDONLY);
+  ASSERT_NE(-1, Fd);
+  ScopedFileCloserAndDeleter Guard(Fd, TmpFilename);
+  auto Size = lseek(Fd, 0, SEEK_END);
+  ASSERT_NE(Size, 0);
+  // Map the file contents.
+  const char *Contents = static_cast<const char *>(
+      mmap(NULL, Size, PROT_READ, MAP_PRIVATE, Fd, 0));
+  ASSERT_NE(Contents, nullptr);
+
+  XRayFileHeader H;
+  memcpy(&H, Contents, sizeof(XRayFileHeader));
+  ASSERT_EQ(H.Version, 1);
+  ASSERT_EQ(H.Type, FileTypes::FDR_LOG);
+
+  MetadataRecord MDR0;
+  memcpy(&MDR0, Contents + sizeof(XRayFileHeader), sizeof(MetadataRecord));
+  ASSERT_EQ(MDR0.RecordKind, uint8_t(MetadataRecord::RecordKinds::NewBuffer));
+}
+
+} // namespace
+} // namespace __xray
diff --git a/lib/xray/xray_AArch64.cc b/lib/xray/xray_AArch64.cc
index 0c1df22..f26e77d 100644
--- a/lib/xray/xray_AArch64.cc
+++ b/lib/xray/xray_AArch64.cc
@@ -14,29 +14,14 @@
 //===----------------------------------------------------------------------===//
 #include "sanitizer_common/sanitizer_common.h"
 #include "xray_defs.h"
-#include "xray_emulate_tsc.h"
 #include "xray_interface_internal.h"
 #include <atomic>
 #include <cassert>
 
-
-extern "C" void __clear_cache(void* start, void* end);
+extern "C" void __clear_cache(void *start, void *end);
 
 namespace __xray {
 
-uint64_t cycleFrequency() XRAY_NEVER_INSTRUMENT {
-  // There is no instruction like RDTSCP in user mode on ARM.  ARM's CP15 does
-  //   not have a constant frequency like TSC on x86[_64]; it may go faster or
-  //   slower depending on CPU's turbo or power saving modes.  Furthermore, to
-  //   read from CP15 on ARM a kernel modification or a driver is needed.
-  //   We can not require this from users of compiler-rt.
-  // So on ARM we use clock_gettime(2) which gives the result in nanoseconds.
-  //   To get the measurements per second, we scale this by the number of
-  //   nanoseconds per second, pretending that the TSC frequency is 1GHz and
-  //   one TSC tick is 1 nanosecond.
-  return NanosecondsPerSecond;
-}
-
 // The machine codes for some instructions used in runtime patching.
 enum class PatchOpcodes : uint32_t {
   PO_StpX0X30SP_m16e = 0xA9BF7BE0, // STP X0, X30, [SP, #-16]!
@@ -100,14 +85,15 @@
         reinterpret_cast<std::atomic<uint32_t> *>(FirstAddress),
         uint32_t(PatchOpcodes::PO_B32), std::memory_order_release);
   }
-  __clear_cache(reinterpret_cast<char*>(FirstAddress),
-      reinterpret_cast<char*>(CurAddress));
+  __clear_cache(reinterpret_cast<char *>(FirstAddress),
+                reinterpret_cast<char *>(CurAddress));
   return true;
 }
 
 bool patchFunctionEntry(const bool Enable, const uint32_t FuncId,
-                        const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
-  return patchSled(Enable, FuncId, Sled, __xray_FunctionEntry);
+                        const XRaySledEntry &Sled,
+                        void (*Trampoline)()) XRAY_NEVER_INSTRUMENT {
+  return patchSled(Enable, FuncId, Sled, Trampoline);
 }
 
 bool patchFunctionExit(const bool Enable, const uint32_t FuncId,
@@ -117,9 +103,20 @@
 
 bool patchFunctionTailExit(const bool Enable, const uint32_t FuncId,
                            const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
-  // FIXME: In the future we'd need to distinguish between non-tail exits and
-  // tail exits for better information preservation.
-  return patchSled(Enable, FuncId, Sled, __xray_FunctionExit);
+  return patchSled(Enable, FuncId, Sled, __xray_FunctionTailExit);
 }
 
+bool patchCustomEvent(const bool Enable, const uint32_t FuncId,
+                      const XRaySledEntry &Sled)
+    XRAY_NEVER_INSTRUMENT { // FIXME: Implement in aarch64?
+  return false;
+}
+
+// FIXME: Maybe implement this better?
+bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT { return true; }
+
 } // namespace __xray
+
+extern "C" void __xray_ArgLoggerEntry() XRAY_NEVER_INSTRUMENT {
+  // FIXME: this will have to be implemented in the trampoline assembly file
+}
diff --git a/lib/xray/xray_always_instrument.txt b/lib/xray/xray_always_instrument.txt
new file mode 100644
index 0000000..151ed70
--- /dev/null
+++ b/lib/xray/xray_always_instrument.txt
@@ -0,0 +1,6 @@
+# List of function matchers common to C/C++ applications that make sense to
+# always instrument. You can use this as an argument to
+# -fxray-always-instrument=<path> along with your project-specific lists.
+
+# Always instrument the main function.
+fun:main
diff --git a/lib/xray/xray_arm.cc b/lib/xray/xray_arm.cc
index f5e2cd2..da4efcd 100644
--- a/lib/xray/xray_arm.cc
+++ b/lib/xray/xray_arm.cc
@@ -14,28 +14,14 @@
 //===----------------------------------------------------------------------===//
 #include "sanitizer_common/sanitizer_common.h"
 #include "xray_defs.h"
-#include "xray_emulate_tsc.h"
 #include "xray_interface_internal.h"
 #include <atomic>
 #include <cassert>
 
-extern "C" void __clear_cache(void* start, void* end);
+extern "C" void __clear_cache(void *start, void *end);
 
 namespace __xray {
 
-uint64_t cycleFrequency() XRAY_NEVER_INSTRUMENT {
-  // There is no instruction like RDTSCP in user mode on ARM.  ARM's CP15 does
-  //   not have a constant frequency like TSC on x86[_64]; it may go faster or
-  //   slower depending on CPU's turbo or power saving modes.  Furthermore, to
-  //   read from CP15 on ARM a kernel modification or a driver is needed.
-  //   We can not require this from users of compiler-rt.
-  // So on ARM we use clock_gettime(2) which gives the result in nanoseconds.
-  //   To get the measurements per second, we scale this by the number of
-  //   nanoseconds per second, pretending that the TSC frequency is 1GHz and
-  //   one TSC tick is 1 nanosecond.
-  return NanosecondsPerSecond;
-}
-
 // The machine codes for some instructions used in runtime patching.
 enum class PatchOpcodes : uint32_t {
   PO_PushR0Lr = 0xE92D4001, // PUSH {r0, lr}
@@ -74,7 +60,7 @@
 //   MOVW r0, #<lower 16 bits of the |Value|>
 //   MOVT r0, #<higher 16 bits of the |Value|>
 inline static uint32_t *
-Write32bitLoadR0(uint32_t *Address,
+write32bitLoadR0(uint32_t *Address,
                  const uint32_t Value) XRAY_NEVER_INSTRUMENT {
   return write32bitLoadReg(0, Address, Value);
 }
@@ -83,7 +69,7 @@
 //   MOVW ip, #<lower 16 bits of the |Value|>
 //   MOVT ip, #<higher 16 bits of the |Value|>
 inline static uint32_t *
-Write32bitLoadIP(uint32_t *Address,
+write32bitLoadIP(uint32_t *Address,
                  const uint32_t Value) XRAY_NEVER_INSTRUMENT {
   return write32bitLoadReg(12, Address, Value);
 }
@@ -121,9 +107,9 @@
   uint32_t *CurAddress = FirstAddress + 1;
   if (Enable) {
     CurAddress =
-        Write32bitLoadR0(CurAddress, reinterpret_cast<uint32_t>(FuncId));
+        write32bitLoadR0(CurAddress, reinterpret_cast<uint32_t>(FuncId));
     CurAddress =
-        Write32bitLoadIP(CurAddress, reinterpret_cast<uint32_t>(TracingHook));
+        write32bitLoadIP(CurAddress, reinterpret_cast<uint32_t>(TracingHook));
     *CurAddress = uint32_t(PatchOpcodes::PO_BlxIp);
     CurAddress++;
     *CurAddress = uint32_t(PatchOpcodes::PO_PopR0Lr);
@@ -136,14 +122,15 @@
         reinterpret_cast<std::atomic<uint32_t> *>(FirstAddress),
         uint32_t(PatchOpcodes::PO_B20), std::memory_order_release);
   }
-  __clear_cache(reinterpret_cast<char*>(FirstAddress),
-      reinterpret_cast<char*>(CurAddress));
+  __clear_cache(reinterpret_cast<char *>(FirstAddress),
+                reinterpret_cast<char *>(CurAddress));
   return true;
 }
 
 bool patchFunctionEntry(const bool Enable, const uint32_t FuncId,
-                        const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
-  return patchSled(Enable, FuncId, Sled, __xray_FunctionEntry);
+                        const XRaySledEntry &Sled,
+                        void (*Trampoline)()) XRAY_NEVER_INSTRUMENT {
+  return patchSled(Enable, FuncId, Sled, Trampoline);
 }
 
 bool patchFunctionExit(const bool Enable, const uint32_t FuncId,
@@ -153,9 +140,20 @@
 
 bool patchFunctionTailExit(const bool Enable, const uint32_t FuncId,
                            const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
-  // FIXME: In the future we'd need to distinguish between non-tail exits and
-  // tail exits for better information preservation.
-  return patchSled(Enable, FuncId, Sled, __xray_FunctionExit);
+  return patchSled(Enable, FuncId, Sled, __xray_FunctionTailExit);
 }
 
+bool patchCustomEvent(const bool Enable, const uint32_t FuncId,
+                      const XRaySledEntry &Sled)
+    XRAY_NEVER_INSTRUMENT { // FIXME: Implement in arm?
+  return false;
+}
+
+// FIXME: Maybe implement this better?
+bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT { return true; }
+
 } // namespace __xray
+
+extern "C" void __xray_ArgLoggerEntry() XRAY_NEVER_INSTRUMENT {
+  // FIXME: this will have to be implemented in the trampoline assembly file
+}
diff --git a/lib/xray/xray_buffer_queue.cc b/lib/xray/xray_buffer_queue.cc
index 7e5462f..7ba755a 100644
--- a/lib/xray/xray_buffer_queue.cc
+++ b/lib/xray/xray_buffer_queue.cc
@@ -13,53 +13,69 @@
 //
 //===----------------------------------------------------------------------===//
 #include "xray_buffer_queue.h"
-#include <cassert>
+#include "sanitizer_common/sanitizer_common.h"
+#include "sanitizer_common/sanitizer_libc.h"
+
 #include <cstdlib>
+#include <tuple>
 
 using namespace __xray;
+using namespace __sanitizer;
 
-BufferQueue::BufferQueue(std::size_t B, std::size_t N)
-    : BufferSize(B), Buffers(N), Mutex(), OwnedBuffers(), Finalizing(false) {
-  for (auto &Buf : Buffers) {
+BufferQueue::BufferQueue(std::size_t B, std::size_t N, bool &Success)
+    : BufferSize(B), Buffers(N), Mutex(), OwnedBuffers(), Finalizing{0} {
+  for (auto &T : Buffers) {
     void *Tmp = malloc(BufferSize);
+    if (Tmp == nullptr) {
+      Success = false;
+      return;
+    }
+
+    auto &Buf = std::get<0>(T);
     Buf.Buffer = Tmp;
     Buf.Size = B;
-    if (Tmp != 0)
-      OwnedBuffers.insert(Tmp);
+    OwnedBuffers.emplace(Tmp);
   }
+  Success = true;
 }
 
-std::error_code BufferQueue::getBuffer(Buffer &Buf) {
-  if (Finalizing.load(std::memory_order_acquire))
-    return std::make_error_code(std::errc::state_not_recoverable);
-  std::lock_guard<std::mutex> Guard(Mutex);
+BufferQueue::ErrorCode BufferQueue::getBuffer(Buffer &Buf) {
+  if (__sanitizer::atomic_load(&Finalizing, __sanitizer::memory_order_acquire))
+    return ErrorCode::QueueFinalizing;
+  __sanitizer::BlockingMutexLock Guard(&Mutex);
   if (Buffers.empty())
-    return std::make_error_code(std::errc::not_enough_memory);
-  Buf = Buffers.front();
+    return ErrorCode::NotEnoughMemory;
+  auto &T = Buffers.front();
+  auto &B = std::get<0>(T);
+  Buf = B;
+  B.Buffer = nullptr;
+  B.Size = 0;
   Buffers.pop_front();
-  return {};
+  return ErrorCode::Ok;
 }
 
-std::error_code BufferQueue::releaseBuffer(Buffer &Buf) {
+BufferQueue::ErrorCode BufferQueue::releaseBuffer(Buffer &Buf) {
   if (OwnedBuffers.count(Buf.Buffer) == 0)
-    return std::make_error_code(std::errc::argument_out_of_domain);
-  std::lock_guard<std::mutex> Guard(Mutex);
-  Buffers.push_back(Buf);
+    return ErrorCode::UnrecognizedBuffer;
+  __sanitizer::BlockingMutexLock Guard(&Mutex);
+
+  // Now that the buffer has been released, we mark it as "used".
+  Buffers.emplace(Buffers.end(), Buf, true /* used */);
   Buf.Buffer = nullptr;
-  Buf.Size = BufferSize;
-  return {};
+  Buf.Size = 0;
+  return ErrorCode::Ok;
 }
 
-std::error_code BufferQueue::finalize() {
-  if (Finalizing.exchange(true, std::memory_order_acq_rel))
-    return std::make_error_code(std::errc::state_not_recoverable);
-  return {};
+BufferQueue::ErrorCode BufferQueue::finalize() {
+  if (__sanitizer::atomic_exchange(&Finalizing, 1,
+                                   __sanitizer::memory_order_acq_rel))
+    return ErrorCode::QueueFinalizing;
+  return ErrorCode::Ok;
 }
 
 BufferQueue::~BufferQueue() {
-  for (auto &Buf : Buffers) {
+  for (auto &T : Buffers) {
+    auto &Buf = std::get<0>(T);
     free(Buf.Buffer);
-    Buf.Buffer = nullptr;
-    Buf.Size = 0;
   }
 }
diff --git a/lib/xray/xray_buffer_queue.h b/lib/xray/xray_buffer_queue.h
index bf0b7af..e051695 100644
--- a/lib/xray/xray_buffer_queue.h
+++ b/lib/xray/xray_buffer_queue.h
@@ -15,12 +15,11 @@
 #ifndef XRAY_BUFFER_QUEUE_H
 #define XRAY_BUFFER_QUEUE_H
 
-#include <atomic>
-#include <cstdint>
+#include "sanitizer_common/sanitizer_atomic.h"
+#include "sanitizer_common/sanitizer_mutex.h"
 #include <deque>
-#include <mutex>
-#include <system_error>
 #include <unordered_set>
+#include <utility>
 
 namespace __xray {
 
@@ -33,19 +32,47 @@
 public:
   struct Buffer {
     void *Buffer = nullptr;
-    std::size_t Size = 0;
+    size_t Size = 0;
   };
 
 private:
-  std::size_t BufferSize;
-  std::deque<Buffer> Buffers;
-  std::mutex Mutex;
+  size_t BufferSize;
+
+  // We use a bool to indicate whether the Buffer has been used in this
+  // freelist implementation.
+  std::deque<std::tuple<Buffer, bool>> Buffers;
+  __sanitizer::BlockingMutex Mutex;
   std::unordered_set<void *> OwnedBuffers;
-  std::atomic<bool> Finalizing;
+  __sanitizer::atomic_uint8_t Finalizing;
 
 public:
-  /// Initialise a queue of size |N| with buffers of size |B|.
-  BufferQueue(std::size_t B, std::size_t N);
+  enum class ErrorCode : unsigned {
+    Ok,
+    NotEnoughMemory,
+    QueueFinalizing,
+    UnrecognizedBuffer,
+    AlreadyFinalized,
+  };
+
+  static const char *getErrorString(ErrorCode E) {
+    switch (E) {
+    case ErrorCode::Ok:
+      return "(none)";
+    case ErrorCode::NotEnoughMemory:
+      return "no available buffers in the queue";
+    case ErrorCode::QueueFinalizing:
+      return "queue already finalizing";
+    case ErrorCode::UnrecognizedBuffer:
+      return "buffer being returned not owned by buffer queue";
+    case ErrorCode::AlreadyFinalized:
+      return "queue already finalized";
+    }
+    return "unknown error";
+  }
+
+  /// Initialise a queue of size |N| with buffers of size |B|. We report success
+  /// through |Success|.
+  BufferQueue(size_t B, size_t N, bool &Success);
 
   /// Updates |Buf| to contain the pointer to an appropriate buffer. Returns an
   /// error in case there are no available buffers to return when we will run
@@ -58,24 +85,41 @@
   ///   - std::errc::not_enough_memory on exceeding MaxSize.
   ///   - no error when we find a Buffer.
   ///   - std::errc::state_not_recoverable on finalising BufferQueue.
-  std::error_code getBuffer(Buffer &Buf);
+  ErrorCode getBuffer(Buffer &Buf);
 
   /// Updates |Buf| to point to nullptr, with size 0.
   ///
   /// Returns:
   ///   - ...
-  std::error_code releaseBuffer(Buffer &Buf);
+  ErrorCode releaseBuffer(Buffer &Buf);
 
-  bool finalizing() const { return Finalizing.load(std::memory_order_acquire); }
+  bool finalizing() const {
+    return __sanitizer::atomic_load(&Finalizing,
+                                    __sanitizer::memory_order_acquire);
+  }
 
-  // Sets the state of the BufferQueue to finalizing, which ensures that:
-  //
-  //   - All subsequent attempts to retrieve a Buffer will fail.
-  //   - All releaseBuffer operations will not fail.
-  //
-  // After a call to finalize succeeds, all subsequent calls to finalize will
-  // fail with std::errc::state_not_recoverable.
-  std::error_code finalize();
+  /// Returns the configured size of the buffers in the buffer queue.
+  size_t ConfiguredBufferSize() const { return BufferSize; }
+
+  /// Sets the state of the BufferQueue to finalizing, which ensures that:
+  ///
+  ///   - All subsequent attempts to retrieve a Buffer will fail.
+  ///   - All releaseBuffer operations will not fail.
+  ///
+  /// After a call to finalize succeeds, all subsequent calls to finalize will
+  /// fail with std::errc::state_not_recoverable.
+  ErrorCode finalize();
+
+  /// Applies the provided function F to each Buffer in the queue, only if the
+  /// Buffer is marked 'used' (i.e. has been the result of getBuffer(...) and a
+  /// releaseBuffer(...) operation.
+  template <class F> void apply(F Fn) {
+    __sanitizer::BlockingMutexLock G(&Mutex);
+    for (const auto &T : Buffers) {
+      if (std::get<1>(T))
+        Fn(std::get<0>(T));
+    }
+  }
 
   // Cleans up allocated buffers.
   ~BufferQueue();
diff --git a/lib/xray/xray_emulate_tsc.h b/lib/xray/xray_emulate_tsc.h
deleted file mode 100644
index a3e8b1c..0000000
--- a/lib/xray/xray_emulate_tsc.h
+++ /dev/null
@@ -1,40 +0,0 @@
-//===-- xray_emulate_tsc.h --------------------------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a part of XRay, a dynamic runtime instrumentation system.
-//
-//===----------------------------------------------------------------------===//
-#ifndef XRAY_EMULATE_TSC_H
-#define XRAY_EMULATE_TSC_H
-
-#include "sanitizer_common/sanitizer_common.h"
-#include "sanitizer_common/sanitizer_internal_defs.h"
-#include "xray_defs.h"
-#include <cerrno>
-#include <cstdint>
-#include <time.h>
-
-namespace __xray {
-
-static constexpr uint64_t NanosecondsPerSecond = 1000ULL * 1000 * 1000;
-
-ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
-  timespec TS;
-  int result = clock_gettime(CLOCK_REALTIME, &TS);
-  if (result != 0) {
-    Report("clock_gettime(2) returned %d, errno=%d.", result, int(errno));
-    TS.tv_sec = 0;
-    TS.tv_nsec = 0;
-  }
-  CPU = 0;
-  return TS.tv_sec * NanosecondsPerSecond + TS.tv_nsec;
-}
-}
-
-#endif // XRAY_EMULATE_TSC_H
diff --git a/lib/xray/xray_fdr_log_records.h b/lib/xray/xray_fdr_log_records.h
new file mode 100644
index 0000000..3d6d388
--- /dev/null
+++ b/lib/xray/xray_fdr_log_records.h
@@ -0,0 +1,66 @@
+//===-- xray_fdr_log_records.h  -------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a function call tracing system.
+//
+//===----------------------------------------------------------------------===//
+#ifndef XRAY_XRAY_FDR_LOG_RECORDS_H
+#define XRAY_XRAY_FDR_LOG_RECORDS_H
+
+enum class RecordType : uint8_t { Function, Metadata };
+
+// A MetadataRecord encodes the kind of record in its first byte, and have 15
+// additional bytes in the end to hold free-form data.
+struct alignas(16) MetadataRecord {
+  // A MetadataRecord must always have a type of 1.
+  /* RecordType */ uint8_t Type : 1;
+
+  // Each kind of record is represented as a 7-bit value (even though we use an
+  // unsigned 8-bit enum class to do so).
+  enum class RecordKinds : uint8_t {
+    NewBuffer,
+    EndOfBuffer,
+    NewCPUId,
+    TSCWrap,
+    WalltimeMarker,
+    CustomEventMarker,
+  };
+  // Use 7 bits to identify this record type.
+  /* RecordKinds */ uint8_t RecordKind : 7;
+  char Data[15];
+} __attribute__((packed));
+
+static_assert(sizeof(MetadataRecord) == 16, "Wrong size for MetadataRecord.");
+
+struct alignas(8) FunctionRecord {
+  // A FunctionRecord must always have a type of 0.
+  /* RecordType */ uint8_t Type : 1;
+  enum class RecordKinds {
+    FunctionEnter = 0x00,
+    FunctionExit = 0x01,
+    FunctionTailExit = 0x02,
+  };
+  /* RecordKinds */ uint8_t RecordKind : 3;
+
+  // We only use 28 bits of the function ID, so that we can use as few bytes as
+  // possible. This means we only support 2^28 (268,435,456) unique function ids
+  // in a single binary.
+  int FuncId : 28;
+
+  // We use another 4 bytes to hold the delta between the previous entry's TSC.
+  // In case we've found that the distance is greater than the allowable 32 bits
+  // (either because we are running in a different CPU and the TSC might be
+  // different then), we should use a MetadataRecord before this FunctionRecord
+  // that will contain the full TSC for that CPU, and keep this to 0.
+  uint32_t TSCDelta;
+} __attribute__((packed));
+
+static_assert(sizeof(FunctionRecord) == 8, "Wrong size for FunctionRecord.");
+
+#endif // XRAY_XRAY_FDR_LOG_RECORDS_H
diff --git a/lib/xray/xray_fdr_logging.cc b/lib/xray/xray_fdr_logging.cc
new file mode 100644
index 0000000..a7e1382
--- /dev/null
+++ b/lib/xray/xray_fdr_logging.cc
@@ -0,0 +1,300 @@
+//===-- xray_fdr_logging.cc ------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// Here we implement the Flight Data Recorder mode for XRay, where we use
+// compact structures to store records in memory as well as when writing out the
+// data to files.
+//
+//===----------------------------------------------------------------------===//
+#include "xray_fdr_logging.h"
+#include <algorithm>
+#include <bitset>
+#include <cerrno>
+#include <cstring>
+#include <sys/syscall.h>
+#include <sys/time.h>
+#include <time.h>
+#include <unistd.h>
+#include <unordered_map>
+
+#include "sanitizer_common/sanitizer_atomic.h"
+#include "sanitizer_common/sanitizer_common.h"
+#include "xray/xray_interface.h"
+#include "xray/xray_records.h"
+#include "xray_buffer_queue.h"
+#include "xray_defs.h"
+#include "xray_fdr_logging_impl.h"
+#include "xray_flags.h"
+#include "xray_tsc.h"
+#include "xray_utils.h"
+
+namespace __xray {
+
+// Global BufferQueue.
+std::shared_ptr<BufferQueue> BQ;
+
+__sanitizer::atomic_sint32_t LogFlushStatus = {
+    XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING};
+
+FDRLoggingOptions FDROptions;
+
+__sanitizer::SpinMutex FDROptionsMutex;
+
+// Must finalize before flushing.
+XRayLogFlushStatus fdrLoggingFlush() XRAY_NEVER_INSTRUMENT {
+  if (__sanitizer::atomic_load(&LoggingStatus,
+                               __sanitizer::memory_order_acquire) !=
+      XRayLogInitStatus::XRAY_LOG_FINALIZED)
+    return XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING;
+
+  s32 Result = XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING;
+  if (!__sanitizer::atomic_compare_exchange_strong(
+          &LogFlushStatus, &Result, XRayLogFlushStatus::XRAY_LOG_FLUSHING,
+          __sanitizer::memory_order_release))
+    return static_cast<XRayLogFlushStatus>(Result);
+
+  // Make a copy of the BufferQueue pointer to prevent other threads that may be
+  // resetting it from blowing away the queue prematurely while we're dealing
+  // with it.
+  auto LocalBQ = BQ;
+
+  // We write out the file in the following format:
+  //
+  //   1) We write down the XRay file header with version 1, type FDR_LOG.
+  //   2) Then we use the 'apply' member of the BufferQueue that's live, to
+  //      ensure that at this point in time we write down the buffers that have
+  //      been released (and marked "used") -- we dump the full buffer for now
+  //      (fixed-sized) and let the tools reading the buffers deal with the data
+  //      afterwards.
+  //
+  int Fd = -1;
+  {
+    __sanitizer::SpinMutexLock Guard(&FDROptionsMutex);
+    Fd = FDROptions.Fd;
+  }
+  if (Fd == -1)
+    Fd = getLogFD();
+  if (Fd == -1) {
+    auto Result = XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING;
+    __sanitizer::atomic_store(&LogFlushStatus, Result,
+                              __sanitizer::memory_order_release);
+    return Result;
+  }
+
+  // Test for required CPU features and cache the cycle frequency
+  static bool TSCSupported = probeRequiredCPUFeatures();
+  static uint64_t CycleFrequency =
+      TSCSupported ? getTSCFrequency() : __xray::NanosecondsPerSecond;
+
+  XRayFileHeader Header;
+  Header.Version = 1;
+  Header.Type = FileTypes::FDR_LOG;
+  Header.CycleFrequency = CycleFrequency;
+  // FIXME: Actually check whether we have 'constant_tsc' and 'nonstop_tsc'
+  // before setting the values in the header.
+  Header.ConstantTSC = 1;
+  Header.NonstopTSC = 1;
+  Header.FdrData = FdrAdditionalHeaderData{LocalBQ->ConfiguredBufferSize()};
+  retryingWriteAll(Fd, reinterpret_cast<char *>(&Header),
+                   reinterpret_cast<char *>(&Header) + sizeof(Header));
+
+  LocalBQ->apply([&](const BufferQueue::Buffer &B) {
+    uint64_t BufferSize = B.Size;
+    if (BufferSize > 0) {
+      retryingWriteAll(Fd, reinterpret_cast<char *>(B.Buffer),
+                       reinterpret_cast<char *>(B.Buffer) + B.Size);
+    }
+  });
+  __sanitizer::atomic_store(&LogFlushStatus,
+                            XRayLogFlushStatus::XRAY_LOG_FLUSHED,
+                            __sanitizer::memory_order_release);
+  return XRayLogFlushStatus::XRAY_LOG_FLUSHED;
+}
+
+XRayLogInitStatus fdrLoggingFinalize() XRAY_NEVER_INSTRUMENT {
+  s32 CurrentStatus = XRayLogInitStatus::XRAY_LOG_INITIALIZED;
+  if (!__sanitizer::atomic_compare_exchange_strong(
+          &LoggingStatus, &CurrentStatus,
+          XRayLogInitStatus::XRAY_LOG_FINALIZING,
+          __sanitizer::memory_order_release))
+    return static_cast<XRayLogInitStatus>(CurrentStatus);
+
+  // Do special things to make the log finalize itself, and not allow any more
+  // operations to be performed until re-initialized.
+  BQ->finalize();
+
+  __sanitizer::atomic_store(&LoggingStatus,
+                            XRayLogInitStatus::XRAY_LOG_FINALIZED,
+                            __sanitizer::memory_order_release);
+  return XRayLogInitStatus::XRAY_LOG_FINALIZED;
+}
+
+XRayLogInitStatus fdrLoggingReset() XRAY_NEVER_INSTRUMENT {
+  s32 CurrentStatus = XRayLogInitStatus::XRAY_LOG_FINALIZED;
+  if (__sanitizer::atomic_compare_exchange_strong(
+          &LoggingStatus, &CurrentStatus,
+          XRayLogInitStatus::XRAY_LOG_INITIALIZED,
+          __sanitizer::memory_order_release))
+    return static_cast<XRayLogInitStatus>(CurrentStatus);
+
+  // Release the in-memory buffer queue.
+  BQ.reset();
+
+  // Spin until the flushing status is flushed.
+  s32 CurrentFlushingStatus = XRayLogFlushStatus::XRAY_LOG_FLUSHED;
+  while (__sanitizer::atomic_compare_exchange_weak(
+      &LogFlushStatus, &CurrentFlushingStatus,
+      XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING,
+      __sanitizer::memory_order_release)) {
+    if (CurrentFlushingStatus == XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING)
+      break;
+    CurrentFlushingStatus = XRayLogFlushStatus::XRAY_LOG_FLUSHED;
+  }
+
+  // At this point, we know that the status is flushed, and that we can assume
+  return XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
+}
+
+static std::tuple<uint64_t, unsigned char>
+getTimestamp() XRAY_NEVER_INSTRUMENT {
+  // We want to get the TSC as early as possible, so that we can check whether
+  // we've seen this CPU before. We also do it before we load anything else, to
+  // allow for forward progress with the scheduling.
+  unsigned char CPU;
+  uint64_t TSC;
+
+  // Test once for required CPU features
+  static bool TSCSupported = probeRequiredCPUFeatures();
+
+  if (TSCSupported) {
+    TSC = __xray::readTSC(CPU);
+  } else {
+    // FIXME: This code needs refactoring as it appears in multiple locations
+    timespec TS;
+    int result = clock_gettime(CLOCK_REALTIME, &TS);
+    if (result != 0) {
+      Report("clock_gettime(2) return %d, errno=%d", result, int(errno));
+      TS = {0, 0};
+    }
+    CPU = 0;
+    TSC = TS.tv_sec * __xray::NanosecondsPerSecond + TS.tv_nsec;
+  }
+  return std::make_tuple(TSC, CPU);
+}
+
+void fdrLoggingHandleArg0(int32_t FuncId,
+                          XRayEntryType Entry) XRAY_NEVER_INSTRUMENT {
+  auto TSC_CPU = getTimestamp();
+  __xray_fdr_internal::processFunctionHook(FuncId, Entry, std::get<0>(TSC_CPU),
+                                           std::get<1>(TSC_CPU), clock_gettime,
+                                           LoggingStatus, BQ);
+}
+
+void fdrLoggingHandleCustomEvent(void *Event,
+                                 std::size_t EventSize) XRAY_NEVER_INSTRUMENT {
+  using namespace __xray_fdr_internal;
+  auto TSC_CPU = getTimestamp();
+  auto &TSC = std::get<0>(TSC_CPU);
+  auto &CPU = std::get<1>(TSC_CPU);
+  thread_local bool Running = false;
+  RecursionGuard Guard{Running};
+  if (!Guard) {
+    assert(Running && "RecursionGuard is buggy!");
+    return;
+  }
+  if (EventSize > std::numeric_limits<int32_t>::max()) {
+    using Empty = struct {};
+    static Empty Once = [&] {
+      Report("Event size too large = %zu ; > max = %d\n", EventSize,
+             std::numeric_limits<int32_t>::max());
+      return Empty();
+    }();
+    (void)Once;
+  }
+  int32_t ReducedEventSize = static_cast<int32_t>(EventSize);
+  if (!isLogInitializedAndReady(LocalBQ, TSC, CPU, clock_gettime))
+    return;
+
+  // Here we need to prepare the log to handle:
+  //   - The metadata record we're going to write. (16 bytes)
+  //   - The additional data we're going to write. Currently, that's the size of
+  //   the event we're going to dump into the log as free-form bytes.
+  if (!prepareBuffer(clock_gettime, MetadataRecSize + EventSize)) {
+    LocalBQ = nullptr;
+    return;
+  }
+
+  // Write the custom event metadata record, which consists of the following
+  // information:
+  //   - 8 bytes (64-bits) for the full TSC when the event started.
+  //   - 4 bytes (32-bits) for the length of the data.
+  MetadataRecord CustomEvent;
+  CustomEvent.Type = uint8_t(RecordType::Metadata);
+  CustomEvent.RecordKind =
+      uint8_t(MetadataRecord::RecordKinds::CustomEventMarker);
+  constexpr auto TSCSize = sizeof(std::get<0>(TSC_CPU));
+  std::memcpy(&CustomEvent.Data, &ReducedEventSize, sizeof(int32_t));
+  std::memcpy(&CustomEvent.Data[sizeof(int32_t)], &TSC, TSCSize);
+  std::memcpy(RecordPtr, &CustomEvent, sizeof(CustomEvent));
+  RecordPtr += sizeof(CustomEvent);
+  std::memcpy(RecordPtr, Event, ReducedEventSize);
+  endBufferIfFull();
+}
+
+XRayLogInitStatus fdrLoggingInit(std::size_t BufferSize, std::size_t BufferMax,
+                                 void *Options,
+                                 size_t OptionsSize) XRAY_NEVER_INSTRUMENT {
+  if (OptionsSize != sizeof(FDRLoggingOptions))
+    return static_cast<XRayLogInitStatus>(__sanitizer::atomic_load(
+        &LoggingStatus, __sanitizer::memory_order_acquire));
+  s32 CurrentStatus = XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
+  if (!__sanitizer::atomic_compare_exchange_strong(
+          &LoggingStatus, &CurrentStatus,
+          XRayLogInitStatus::XRAY_LOG_INITIALIZING,
+          __sanitizer::memory_order_release))
+    return static_cast<XRayLogInitStatus>(CurrentStatus);
+
+  {
+    __sanitizer::SpinMutexLock Guard(&FDROptionsMutex);
+    memcpy(&FDROptions, Options, OptionsSize);
+  }
+
+  bool Success = false;
+  BQ = std::make_shared<BufferQueue>(BufferSize, BufferMax, Success);
+  if (!Success) {
+    Report("BufferQueue init failed.\n");
+    return XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
+  }
+
+  // Install the actual handleArg0 handler after initialising the buffers.
+  __xray_set_handler(fdrLoggingHandleArg0);
+  __xray_set_customevent_handler(fdrLoggingHandleCustomEvent);
+
+  __sanitizer::atomic_store(&LoggingStatus,
+                            XRayLogInitStatus::XRAY_LOG_INITIALIZED,
+                            __sanitizer::memory_order_release);
+  Report("XRay FDR init successful.\n");
+  return XRayLogInitStatus::XRAY_LOG_INITIALIZED;
+}
+
+} // namespace __xray
+
+static auto UNUSED Unused = [] {
+  using namespace __xray;
+  if (flags()->xray_fdr_log) {
+    XRayLogImpl Impl{
+        fdrLoggingInit, fdrLoggingFinalize, fdrLoggingHandleArg0,
+        fdrLoggingFlush,
+    };
+    __xray_set_log_impl(Impl);
+  }
+  return true;
+}();
diff --git a/lib/xray/xray_fdr_logging.h b/lib/xray/xray_fdr_logging.h
new file mode 100644
index 0000000..426b54d
--- /dev/null
+++ b/lib/xray/xray_fdr_logging.h
@@ -0,0 +1,38 @@
+//===-- xray_fdr_logging.h ------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a function call tracing system.
+//
+//===----------------------------------------------------------------------===//
+#ifndef XRAY_XRAY_FDR_LOGGING_H
+#define XRAY_XRAY_FDR_LOGGING_H
+
+#include "xray/xray_log_interface.h"
+#include "xray_fdr_log_records.h"
+
+// FDR (Flight Data Recorder) Mode
+// ===============================
+//
+// The XRay whitepaper describes a mode of operation for function call trace
+// logging that involves writing small records into an in-memory circular
+// buffer, that then gets logged to disk on demand. To do this efficiently and
+// capture as much data as we can, we use smaller records compared to the
+// default mode of always writing fixed-size records.
+
+namespace __xray {
+XRayLogInitStatus fdrLoggingInit(size_t BufferSize, size_t BufferMax,
+                                 void *Options, size_t OptionsSize);
+XRayLogInitStatus fdrLoggingFinalize();
+void fdrLoggingHandleArg0(int32_t FuncId, XRayEntryType Entry);
+XRayLogFlushStatus fdrLoggingFlush();
+XRayLogInitStatus fdrLoggingReset();
+
+} // namespace __xray
+
+#endif // XRAY_XRAY_FDR_LOGGING_H
diff --git a/lib/xray/xray_fdr_logging_impl.h b/lib/xray/xray_fdr_logging_impl.h
new file mode 100644
index 0000000..4a1d80f
--- /dev/null
+++ b/lib/xray/xray_fdr_logging_impl.h
@@ -0,0 +1,694 @@
+//===-- xray_fdr_logging_impl.h ---------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// Here we implement the thread local state management and record i/o for Flight
+// Data Recorder mode for XRay, where we use compact structures to store records
+// in memory as well as when writing out the data to files.
+//
+//===----------------------------------------------------------------------===//
+#ifndef XRAY_XRAY_FDR_LOGGING_IMPL_H
+#define XRAY_XRAY_FDR_LOGGING_IMPL_H
+
+#include <cassert>
+#include <cstdint>
+#include <cstring>
+#include <limits>
+#include <memory>
+#include <string>
+#include <sys/syscall.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "sanitizer_common/sanitizer_common.h"
+#include "xray/xray_log_interface.h"
+#include "xray_buffer_queue.h"
+#include "xray_defs.h"
+#include "xray_fdr_log_records.h"
+#include "xray_flags.h"
+#include "xray_tsc.h"
+
+namespace __xray {
+
+__sanitizer::atomic_sint32_t LoggingStatus = {
+    XRayLogInitStatus::XRAY_LOG_UNINITIALIZED};
+
+/// We expose some of the state transitions when FDR logging mode is operating
+/// such that we can simulate a series of log events that may occur without
+/// and test with determinism without worrying about the real CPU time.
+///
+/// Because the code uses thread_local allocation extensively as part of its
+/// design, callers that wish to test events occuring on different threads
+/// will actually have to run them on different threads.
+///
+/// This also means that it is possible to break invariants maintained by
+/// cooperation with xray_fdr_logging class, so be careful and think twice.
+namespace __xray_fdr_internal {
+
+/// Writes the new buffer record and wallclock time that begin a buffer for a
+/// thread to MemPtr and increments MemPtr. Bypasses the thread local state
+/// machine and writes directly to memory without checks.
+static void writeNewBufferPreamble(pid_t Tid, timespec TS, char *&MemPtr);
+
+/// Write a metadata record to switch to a new CPU to MemPtr and increments
+/// MemPtr. Bypasses the thread local state machine and writes directly to
+/// memory without checks.
+static void writeNewCPUIdMetadata(uint16_t CPU, uint64_t TSC, char *&MemPtr);
+
+/// Writes an EOB metadata record to MemPtr and increments MemPtr. Bypasses the
+/// thread local state machine and writes directly to memory without checks.
+static void writeEOBMetadata(char *&MemPtr);
+
+/// Writes a TSC Wrap metadata record to MemPtr and increments MemPtr. Bypasses
+/// the thread local state machine and directly writes to memory without checks.
+static void writeTSCWrapMetadata(uint64_t TSC, char *&MemPtr);
+
+/// Writes a Function Record to MemPtr and increments MemPtr. Bypasses the
+/// thread local state machine and writes the function record directly to
+/// memory.
+static void writeFunctionRecord(int FuncId, uint32_t TSCDelta,
+                                XRayEntryType EntryType, char *&MemPtr);
+
+/// Sets up a new buffer in thread_local storage and writes a preamble. The
+/// wall_clock_reader function is used to populate the WallTimeRecord entry.
+static void setupNewBuffer(int (*wall_clock_reader)(clockid_t,
+                                                    struct timespec *));
+
+/// Called to record CPU time for a new CPU within the current thread.
+static void writeNewCPUIdMetadata(uint16_t CPU, uint64_t TSC);
+
+/// Called to close the buffer when the thread exhausts the buffer or when the
+/// thread exits (via a thread local variable destructor).
+static void writeEOBMetadata();
+
+/// TSC Wrap records are written when a TSC delta encoding scheme overflows.
+static void writeTSCWrapMetadata(uint64_t TSC);
+
+/// Here's where the meat of the processing happens. The writer captures
+/// function entry, exit and tail exit points with a time and will create
+/// TSCWrap, NewCPUId and Function records as necessary. The writer might
+/// walk backward through its buffer and erase trivial functions to avoid
+/// polluting the log and may use the buffer queue to obtain or release a
+/// buffer.
+static void processFunctionHook(int32_t FuncId, XRayEntryType Entry,
+                                uint64_t TSC, unsigned char CPU,
+                                int (*wall_clock_reader)(clockid_t,
+                                                         struct timespec *),
+                                __sanitizer::atomic_sint32_t &LoggingStatus,
+                                const std::shared_ptr<BufferQueue> &BQ);
+
+//-----------------------------------------------------------------------------|
+// The rest of the file is implementation.                                     |
+//-----------------------------------------------------------------------------|
+// Functions are implemented in the header for inlining since we don't want    |
+// to grow the stack when we've hijacked the binary for logging.               |
+//-----------------------------------------------------------------------------|
+
+namespace {
+
+thread_local BufferQueue::Buffer Buffer;
+thread_local char *RecordPtr = nullptr;
+
+// The number of FunctionEntry records immediately preceding RecordPtr.
+thread_local uint8_t NumConsecutiveFnEnters = 0;
+
+// The number of adjacent, consecutive pairs of FunctionEntry, Tail Exit
+// records preceding RecordPtr.
+thread_local uint8_t NumTailCalls = 0;
+
+constexpr auto MetadataRecSize = sizeof(MetadataRecord);
+constexpr auto FunctionRecSize = sizeof(FunctionRecord);
+
+// We use a thread_local variable to keep track of which CPUs we've already
+// run, and the TSC times for these CPUs. This allows us to stop repeating the
+// CPU field in the function records.
+//
+// We assume that we'll support only 65536 CPUs for x86_64.
+thread_local uint16_t CurrentCPU = std::numeric_limits<uint16_t>::max();
+thread_local uint64_t LastTSC = 0;
+thread_local uint64_t LastFunctionEntryTSC = 0;
+
+class ThreadExitBufferCleanup {
+  std::shared_ptr<BufferQueue> &Buffers;
+  BufferQueue::Buffer &Buffer;
+
+public:
+  explicit ThreadExitBufferCleanup(std::shared_ptr<BufferQueue> &BQ,
+                                   BufferQueue::Buffer &Buffer)
+      XRAY_NEVER_INSTRUMENT : Buffers(BQ),
+                              Buffer(Buffer) {}
+
+  ~ThreadExitBufferCleanup() noexcept XRAY_NEVER_INSTRUMENT {
+    if (RecordPtr == nullptr)
+      return;
+
+    // We make sure that upon exit, a thread will write out the EOB
+    // MetadataRecord in the thread-local log, and also release the buffer to
+    // the queue.
+    assert((RecordPtr + MetadataRecSize) - static_cast<char *>(Buffer.Buffer) >=
+           static_cast<ptrdiff_t>(MetadataRecSize));
+    if (Buffers) {
+      writeEOBMetadata();
+      auto EC = Buffers->releaseBuffer(Buffer);
+      if (EC != BufferQueue::ErrorCode::Ok)
+        Report("Failed to release buffer at %p; error=%s\n", Buffer.Buffer,
+               BufferQueue::getErrorString(EC));
+      Buffers = nullptr;
+      return;
+    }
+  }
+};
+
+// Make sure a thread that's ever called handleArg0 has a thread-local
+// live reference to the buffer queue for this particular instance of
+// FDRLogging, and that we're going to clean it up when the thread exits.
+thread_local std::shared_ptr<BufferQueue> LocalBQ = nullptr;
+thread_local ThreadExitBufferCleanup Cleanup(LocalBQ, Buffer);
+
+class RecursionGuard {
+  bool &Running;
+  const bool Valid;
+
+public:
+  explicit RecursionGuard(bool &R) : Running(R), Valid(!R) {
+    if (Valid)
+      Running = true;
+  }
+
+  RecursionGuard(const RecursionGuard &) = delete;
+  RecursionGuard(RecursionGuard &&) = delete;
+  RecursionGuard &operator=(const RecursionGuard &) = delete;
+  RecursionGuard &operator=(RecursionGuard &&) = delete;
+
+  explicit operator bool() const { return Valid; }
+
+  ~RecursionGuard() noexcept {
+    if (Valid)
+      Running = false;
+  }
+};
+
+inline bool loggingInitialized(
+    const __sanitizer::atomic_sint32_t &LoggingStatus) XRAY_NEVER_INSTRUMENT {
+  return __sanitizer::atomic_load(&LoggingStatus,
+                                  __sanitizer::memory_order_acquire) ==
+         XRayLogInitStatus::XRAY_LOG_INITIALIZED;
+}
+
+} // namespace
+
+inline void writeNewBufferPreamble(pid_t Tid, timespec TS,
+                                   char *&MemPtr) XRAY_NEVER_INSTRUMENT {
+  static constexpr int InitRecordsCount = 2;
+  std::aligned_storage<sizeof(MetadataRecord)>::type Records[InitRecordsCount];
+  {
+    // Write out a MetadataRecord to signify that this is the start of a new
+    // buffer, associated with a particular thread, with a new CPU.  For the
+    // data, we have 15 bytes to squeeze as much information as we can.  At this
+    // point we only write down the following bytes:
+    //   - Thread ID (pid_t, 4 bytes)
+    auto &NewBuffer = *reinterpret_cast<MetadataRecord *>(&Records[0]);
+    NewBuffer.Type = uint8_t(RecordType::Metadata);
+    NewBuffer.RecordKind = uint8_t(MetadataRecord::RecordKinds::NewBuffer);
+    std::memcpy(&NewBuffer.Data, &Tid, sizeof(pid_t));
+  }
+  // Also write the WalltimeMarker record.
+  {
+    static_assert(sizeof(time_t) <= 8, "time_t needs to be at most 8 bytes");
+    auto &WalltimeMarker = *reinterpret_cast<MetadataRecord *>(&Records[1]);
+    WalltimeMarker.Type = uint8_t(RecordType::Metadata);
+    WalltimeMarker.RecordKind =
+        uint8_t(MetadataRecord::RecordKinds::WalltimeMarker);
+
+    // We only really need microsecond precision here, and enforce across
+    // platforms that we need 64-bit seconds and 32-bit microseconds encoded in
+    // the Metadata record.
+    int32_t Micros = TS.tv_nsec / 1000;
+    int64_t Seconds = TS.tv_sec;
+    std::memcpy(WalltimeMarker.Data, &Seconds, sizeof(Seconds));
+    std::memcpy(WalltimeMarker.Data + sizeof(Seconds), &Micros, sizeof(Micros));
+  }
+  std::memcpy(MemPtr, Records, sizeof(MetadataRecord) * InitRecordsCount);
+  MemPtr += sizeof(MetadataRecord) * InitRecordsCount;
+  NumConsecutiveFnEnters = 0;
+  NumTailCalls = 0;
+}
+
+inline void setupNewBuffer(int (*wall_clock_reader)(
+    clockid_t, struct timespec *)) XRAY_NEVER_INSTRUMENT {
+  RecordPtr = static_cast<char *>(Buffer.Buffer);
+  pid_t Tid = syscall(SYS_gettid);
+  timespec TS{0, 0};
+  // This is typically clock_gettime, but callers have injection ability.
+  wall_clock_reader(CLOCK_MONOTONIC, &TS);
+  writeNewBufferPreamble(Tid, TS, RecordPtr);
+  NumConsecutiveFnEnters = 0;
+  NumTailCalls = 0;
+}
+
+inline void writeNewCPUIdMetadata(uint16_t CPU, uint64_t TSC,
+                                  char *&MemPtr) XRAY_NEVER_INSTRUMENT {
+  MetadataRecord NewCPUId;
+  NewCPUId.Type = uint8_t(RecordType::Metadata);
+  NewCPUId.RecordKind = uint8_t(MetadataRecord::RecordKinds::NewCPUId);
+
+  // The data for the New CPU will contain the following bytes:
+  //   - CPU ID (uint16_t, 2 bytes)
+  //   - Full TSC (uint64_t, 8 bytes)
+  // Total = 10 bytes.
+  std::memcpy(&NewCPUId.Data, &CPU, sizeof(CPU));
+  std::memcpy(&NewCPUId.Data[sizeof(CPU)], &TSC, sizeof(TSC));
+  std::memcpy(MemPtr, &NewCPUId, sizeof(MetadataRecord));
+  MemPtr += sizeof(MetadataRecord);
+  NumConsecutiveFnEnters = 0;
+  NumTailCalls = 0;
+}
+
+inline void writeNewCPUIdMetadata(uint16_t CPU,
+                                  uint64_t TSC) XRAY_NEVER_INSTRUMENT {
+  writeNewCPUIdMetadata(CPU, TSC, RecordPtr);
+}
+
+inline void writeEOBMetadata(char *&MemPtr) XRAY_NEVER_INSTRUMENT {
+  MetadataRecord EOBMeta;
+  EOBMeta.Type = uint8_t(RecordType::Metadata);
+  EOBMeta.RecordKind = uint8_t(MetadataRecord::RecordKinds::EndOfBuffer);
+  // For now we don't write any bytes into the Data field.
+  std::memcpy(MemPtr, &EOBMeta, sizeof(MetadataRecord));
+  MemPtr += sizeof(MetadataRecord);
+  NumConsecutiveFnEnters = 0;
+  NumTailCalls = 0;
+}
+
+inline void writeEOBMetadata() XRAY_NEVER_INSTRUMENT {
+  writeEOBMetadata(RecordPtr);
+}
+
+inline void writeTSCWrapMetadata(uint64_t TSC,
+                                 char *&MemPtr) XRAY_NEVER_INSTRUMENT {
+  MetadataRecord TSCWrap;
+  TSCWrap.Type = uint8_t(RecordType::Metadata);
+  TSCWrap.RecordKind = uint8_t(MetadataRecord::RecordKinds::TSCWrap);
+
+  // The data for the TSCWrap record contains the following bytes:
+  //   - Full TSC (uint64_t, 8 bytes)
+  // Total = 8 bytes.
+  std::memcpy(&TSCWrap.Data, &TSC, sizeof(TSC));
+  std::memcpy(MemPtr, &TSCWrap, sizeof(MetadataRecord));
+  MemPtr += sizeof(MetadataRecord);
+  NumConsecutiveFnEnters = 0;
+  NumTailCalls = 0;
+}
+
+inline void writeTSCWrapMetadata(uint64_t TSC) XRAY_NEVER_INSTRUMENT {
+  writeTSCWrapMetadata(TSC, RecordPtr);
+}
+
+inline void writeFunctionRecord(int FuncId, uint32_t TSCDelta,
+                                XRayEntryType EntryType,
+                                char *&MemPtr) XRAY_NEVER_INSTRUMENT {
+  std::aligned_storage<sizeof(FunctionRecord), alignof(FunctionRecord)>::type
+      AlignedFuncRecordBuffer;
+  auto &FuncRecord =
+      *reinterpret_cast<FunctionRecord *>(&AlignedFuncRecordBuffer);
+  FuncRecord.Type = uint8_t(RecordType::Function);
+  // Only take 28 bits of the function id.
+  FuncRecord.FuncId = FuncId & ~(0x0F << 28);
+  FuncRecord.TSCDelta = TSCDelta;
+
+  switch (EntryType) {
+  case XRayEntryType::ENTRY:
+    ++NumConsecutiveFnEnters;
+    FuncRecord.RecordKind = uint8_t(FunctionRecord::RecordKinds::FunctionEnter);
+    break;
+  case XRayEntryType::LOG_ARGS_ENTRY:
+    // We should not rewind functions with logged args.
+    NumConsecutiveFnEnters = 0;
+    NumTailCalls = 0;
+    FuncRecord.RecordKind = uint8_t(FunctionRecord::RecordKinds::FunctionEnter);
+    break;
+  case XRayEntryType::EXIT:
+    // If we've decided to log the function exit, we will never erase the log
+    // before it.
+    NumConsecutiveFnEnters = 0;
+    NumTailCalls = 0;
+    FuncRecord.RecordKind = uint8_t(FunctionRecord::RecordKinds::FunctionExit);
+    break;
+  case XRayEntryType::TAIL:
+    // If we just entered the function we're tail exiting from or erased every
+    // invocation since then, this function entry tail pair is a candidate to
+    // be erased when the child function exits.
+    if (NumConsecutiveFnEnters > 0) {
+      ++NumTailCalls;
+      NumConsecutiveFnEnters = 0;
+    } else {
+      // We will never be able to erase this tail call since we have logged
+      // something in between the function entry and tail exit.
+      NumTailCalls = 0;
+      NumConsecutiveFnEnters = 0;
+    }
+    FuncRecord.RecordKind =
+        uint8_t(FunctionRecord::RecordKinds::FunctionTailExit);
+    break;
+  case XRayEntryType::CUSTOM_EVENT: {
+    // This is a bug in patching, so we'll report it once and move on.
+    static bool Once = [&] {
+      Report("Internal error: patched an XRay custom event call as a function; "
+             "func id = %d\n",
+             FuncId);
+      return true;
+    }();
+    (void)Once;
+    return;
+  }
+  }
+
+  std::memcpy(MemPtr, &AlignedFuncRecordBuffer, sizeof(FunctionRecord));
+  MemPtr += sizeof(FunctionRecord);
+}
+
+static uint64_t thresholdTicks() {
+  static uint64_t TicksPerSec = probeRequiredCPUFeatures()
+                                    ? getTSCFrequency()
+                                    : __xray::NanosecondsPerSecond;
+  static const uint64_t ThresholdTicks =
+      TicksPerSec * flags()->xray_fdr_log_func_duration_threshold_us / 1000000;
+  return ThresholdTicks;
+}
+
+// Re-point the thread local pointer into this thread's Buffer before the recent
+// "Function Entry" record and any "Tail Call Exit" records after that.
+static void rewindRecentCall(uint64_t TSC, uint64_t &LastTSC,
+                             uint64_t &LastFunctionEntryTSC, int32_t FuncId) {
+  using AlignedFuncStorage =
+      std::aligned_storage<sizeof(FunctionRecord),
+                           alignof(FunctionRecord)>::type;
+  RecordPtr -= FunctionRecSize;
+  AlignedFuncStorage AlignedFuncRecordBuffer;
+  const auto &FuncRecord = *reinterpret_cast<FunctionRecord *>(
+      std::memcpy(&AlignedFuncRecordBuffer, RecordPtr, FunctionRecSize));
+  assert(FuncRecord.RecordKind ==
+             uint8_t(FunctionRecord::RecordKinds::FunctionEnter) &&
+         "Expected to find function entry recording when rewinding.");
+  assert(FuncRecord.FuncId == (FuncId & ~(0x0F << 28)) &&
+         "Expected matching function id when rewinding Exit");
+  --NumConsecutiveFnEnters;
+  LastTSC -= FuncRecord.TSCDelta;
+
+  // We unwound one call. Update the state and return without writing a log.
+  if (NumConsecutiveFnEnters != 0) {
+    LastFunctionEntryTSC -= FuncRecord.TSCDelta;
+    return;
+  }
+
+  // Otherwise we've rewound the stack of all function entries, we might be
+  // able to rewind further by erasing tail call functions that are being
+  // exited from via this exit.
+  LastFunctionEntryTSC = 0;
+  auto RewindingTSC = LastTSC;
+  auto RewindingRecordPtr = RecordPtr - FunctionRecSize;
+  while (NumTailCalls > 0) {
+    AlignedFuncStorage TailExitRecordBuffer;
+    // Rewind the TSC back over the TAIL EXIT record.
+    const auto &ExpectedTailExit =
+        *reinterpret_cast<FunctionRecord *>(std::memcpy(
+            &TailExitRecordBuffer, RewindingRecordPtr, FunctionRecSize));
+
+    assert(ExpectedTailExit.RecordKind ==
+               uint8_t(FunctionRecord::RecordKinds::FunctionTailExit) &&
+           "Expected to find tail exit when rewinding.");
+    RewindingRecordPtr -= FunctionRecSize;
+    RewindingTSC -= ExpectedTailExit.TSCDelta;
+    AlignedFuncStorage FunctionEntryBuffer;
+    const auto &ExpectedFunctionEntry = *reinterpret_cast<FunctionRecord *>(
+        std::memcpy(&FunctionEntryBuffer, RewindingRecordPtr, FunctionRecSize));
+    assert(ExpectedFunctionEntry.RecordKind ==
+               uint8_t(FunctionRecord::RecordKinds::FunctionEnter) &&
+           "Expected to find function entry when rewinding tail call.");
+    assert(ExpectedFunctionEntry.FuncId == ExpectedTailExit.FuncId &&
+           "Expected funcids to match when rewinding tail call.");
+
+    // This tail call exceeded the threshold duration. It will not be erased.
+    if ((TSC - RewindingTSC) >= thresholdTicks()) {
+      NumTailCalls = 0;
+      return;
+    }
+
+    // We can erase a tail exit pair that we're exiting through since
+    // its duration is under threshold.
+    --NumTailCalls;
+    RewindingRecordPtr -= FunctionRecSize;
+    RewindingTSC -= ExpectedFunctionEntry.TSCDelta;
+    RecordPtr -= 2 * FunctionRecSize;
+    LastTSC = RewindingTSC;
+  }
+}
+
+inline bool releaseThreadLocalBuffer(BufferQueue *BQ) {
+  auto EC = BQ->releaseBuffer(Buffer);
+  if (EC != BufferQueue::ErrorCode::Ok) {
+    Report("Failed to release buffer at %p; error=%s\n", Buffer.Buffer,
+           BufferQueue::getErrorString(EC));
+    return false;
+  }
+  return true;
+}
+
+inline bool prepareBuffer(int (*wall_clock_reader)(clockid_t,
+                                                   struct timespec *),
+                          size_t MaxSize) XRAY_NEVER_INSTRUMENT {
+  char *BufferStart = static_cast<char *>(Buffer.Buffer);
+  if ((RecordPtr + MaxSize) > (BufferStart + Buffer.Size - MetadataRecSize)) {
+    writeEOBMetadata();
+    if (!releaseThreadLocalBuffer(LocalBQ.get()))
+      return false;
+    auto EC = LocalBQ->getBuffer(Buffer);
+    if (EC != BufferQueue::ErrorCode::Ok) {
+      Report("Failed to acquire a buffer; error=%s\n",
+             BufferQueue::getErrorString(EC));
+      return false;
+    }
+    setupNewBuffer(wall_clock_reader);
+  }
+  return true;
+}
+
+inline bool isLogInitializedAndReady(
+    std::shared_ptr<BufferQueue> &LocalBQ, uint64_t TSC, unsigned char CPU,
+    int (*wall_clock_reader)(clockid_t,
+                             struct timespec *)) XRAY_NEVER_INSTRUMENT {
+  // Bail out right away if logging is not initialized yet.
+  // We should take the opportunity to release the buffer though.
+  auto Status = __sanitizer::atomic_load(&LoggingStatus,
+                                         __sanitizer::memory_order_acquire);
+  if (Status != XRayLogInitStatus::XRAY_LOG_INITIALIZED) {
+    if (RecordPtr != nullptr &&
+        (Status == XRayLogInitStatus::XRAY_LOG_FINALIZING ||
+         Status == XRayLogInitStatus::XRAY_LOG_FINALIZED)) {
+      writeEOBMetadata();
+      if (!releaseThreadLocalBuffer(LocalBQ.get()))
+        return false;
+      RecordPtr = nullptr;
+      LocalBQ = nullptr;
+      return false;
+    }
+    return false;
+  }
+
+  if (!loggingInitialized(LoggingStatus) || LocalBQ->finalizing()) {
+    writeEOBMetadata();
+    if (!releaseThreadLocalBuffer(LocalBQ.get()))
+      return false;
+    RecordPtr = nullptr;
+  }
+
+  if (Buffer.Buffer == nullptr) {
+    auto EC = LocalBQ->getBuffer(Buffer);
+    if (EC != BufferQueue::ErrorCode::Ok) {
+      auto LS = __sanitizer::atomic_load(&LoggingStatus,
+                                         __sanitizer::memory_order_acquire);
+      if (LS != XRayLogInitStatus::XRAY_LOG_FINALIZING &&
+          LS != XRayLogInitStatus::XRAY_LOG_FINALIZED)
+        Report("Failed to acquire a buffer; error=%s\n",
+               BufferQueue::getErrorString(EC));
+      return false;
+    }
+
+    setupNewBuffer(wall_clock_reader);
+  }
+
+  if (CurrentCPU == std::numeric_limits<uint16_t>::max()) {
+    // This means this is the first CPU this thread has ever run on. We set
+    // the current CPU and record this as the first TSC we've seen.
+    CurrentCPU = CPU;
+    writeNewCPUIdMetadata(CPU, TSC);
+  }
+
+  return true;
+} // namespace __xray_fdr_internal
+
+inline void endBufferIfFull() XRAY_NEVER_INSTRUMENT {
+  auto BufferStart = static_cast<char *>(Buffer.Buffer);
+  if ((RecordPtr + MetadataRecSize) - BufferStart == MetadataRecSize) {
+    writeEOBMetadata();
+    if (!releaseThreadLocalBuffer(LocalBQ.get()))
+      return;
+    RecordPtr = nullptr;
+  }
+}
+
+inline void processFunctionHook(
+    int32_t FuncId, XRayEntryType Entry, uint64_t TSC, unsigned char CPU,
+    int (*wall_clock_reader)(clockid_t, struct timespec *),
+    __sanitizer::atomic_sint32_t &LoggingStatus,
+    const std::shared_ptr<BufferQueue> &BQ) XRAY_NEVER_INSTRUMENT {
+  // Prevent signal handler recursion, so in case we're already in a log writing
+  // mode and the signal handler comes in (and is also instrumented) then we
+  // don't want to be clobbering potentially partial writes already happening in
+  // the thread. We use a simple thread_local latch to only allow one on-going
+  // handleArg0 to happen at any given time.
+  thread_local bool Running = false;
+  RecursionGuard Guard{Running};
+  if (!Guard) {
+    assert(Running == true && "RecursionGuard is buggy!");
+    return;
+  }
+
+  // In case the reference has been cleaned up before, we make sure we
+  // initialize it to the provided BufferQueue.
+  if (LocalBQ == nullptr)
+    LocalBQ = BQ;
+
+  if (!isLogInitializedAndReady(LocalBQ, TSC, CPU, wall_clock_reader))
+    return;
+
+  // Before we go setting up writing new function entries, we need to be really
+  // careful about the pointer math we're doing. This means we need to ensure
+  // that the record we are about to write is going to fit into the buffer,
+  // without overflowing the buffer.
+  //
+  // To do this properly, we use the following assumptions:
+  //
+  //   - The least number of bytes we will ever write is 8
+  //     (sizeof(FunctionRecord)) only if the delta between the previous entry
+  //     and this entry is within 32 bits.
+  //   - The most number of bytes we will ever write is 8 + 16 = 24. This is
+  //     computed by:
+  //
+  //       sizeof(FunctionRecord) + sizeof(MetadataRecord)
+  //
+  //     These arise in the following cases:
+  //
+  //       1. When the delta between the TSC we get and the previous TSC for the
+  //          same CPU is outside of the uint32_t range, we end up having to
+  //          write a MetadataRecord to indicate a "tsc wrap" before the actual
+  //          FunctionRecord.
+  //       2. When we learn that we've moved CPUs, we need to write a
+  //          MetadataRecord to indicate a "cpu change", and thus write out the
+  //          current TSC for that CPU before writing out the actual
+  //          FunctionRecord.
+  //       3. When we learn about a new CPU ID, we need to write down a "new cpu
+  //          id" MetadataRecord before writing out the actual FunctionRecord.
+  //
+  //   - An End-of-Buffer (EOB) MetadataRecord is 16 bytes.
+  //
+  // So the math we need to do is to determine whether writing 24 bytes past the
+  // current pointer leaves us with enough bytes to write the EOB
+  // MetadataRecord. If we don't have enough space after writing as much as 24
+  // bytes in the end of the buffer, we need to write out the EOB, get a new
+  // Buffer, set it up properly before doing any further writing.
+  //
+  if (!prepareBuffer(wall_clock_reader, FunctionRecSize + MetadataRecSize)) {
+    LocalBQ = nullptr;
+    return;
+  }
+
+  // By this point, we are now ready to write at most 24 bytes (one metadata
+  // record and one function record).
+  assert((RecordPtr + (MetadataRecSize + FunctionRecSize)) -
+                 static_cast<char *>(Buffer.Buffer) >=
+             static_cast<ptrdiff_t>(MetadataRecSize) &&
+         "Misconfigured BufferQueue provided; Buffer size not large enough.");
+
+  // Here we compute the TSC Delta. There are a few interesting situations we
+  // need to account for:
+  //
+  //   - The thread has migrated to a different CPU. If this is the case, then
+  //     we write down the following records:
+  //
+  //       1. A 'NewCPUId' Metadata record.
+  //       2. A FunctionRecord with a 0 for the TSCDelta field.
+  //
+  //   - The TSC delta is greater than the 32 bits we can store in a
+  //     FunctionRecord. In this case we write down the following records:
+  //
+  //       1. A 'TSCWrap' Metadata record.
+  //       2. A FunctionRecord with a 0 for the TSCDelta field.
+  //
+  //   - The TSC delta is representable within the 32 bits we can store in a
+  //     FunctionRecord. In this case we write down just a FunctionRecord with
+  //     the correct TSC delta.
+  //
+  uint32_t RecordTSCDelta = 0;
+  if (CPU != CurrentCPU) {
+    // We've moved to a new CPU.
+    writeNewCPUIdMetadata(CPU, TSC);
+  } else {
+    // If the delta is greater than the range for a uint32_t, then we write out
+    // the TSC wrap metadata entry with the full TSC, and the TSC for the
+    // function record be 0.
+    auto Delta = TSC - LastTSC;
+    if (Delta > (1ULL << 32) - 1)
+      writeTSCWrapMetadata(TSC);
+    else
+      RecordTSCDelta = Delta;
+  }
+
+  LastTSC = TSC;
+  CurrentCPU = CPU;
+  switch (Entry) {
+  case XRayEntryType::ENTRY:
+  case XRayEntryType::LOG_ARGS_ENTRY:
+    // Update the thread local state for the next invocation.
+    LastFunctionEntryTSC = TSC;
+    break;
+  case XRayEntryType::TAIL:
+    break;
+  case XRayEntryType::EXIT:
+    // Break out and write the exit record if we can't erase any functions.
+    if (NumConsecutiveFnEnters == 0 ||
+        (TSC - LastFunctionEntryTSC) >= thresholdTicks())
+      break;
+    rewindRecentCall(TSC, LastTSC, LastFunctionEntryTSC, FuncId);
+    return; // without writing log.
+  case XRayEntryType::CUSTOM_EVENT: {
+    // This is a bug in patching, so we'll report it once and move on.
+    static bool Once = [&] {
+      Report("Internal error: patched an XRay custom event call as a function; "
+             "func id = %d",
+             FuncId);
+      return true;
+    }();
+    (void)Once;
+    return;
+  }
+  }
+
+  writeFunctionRecord(FuncId, RecordTSCDelta, Entry, RecordPtr);
+
+  // If we've exhausted the buffer by this time, we then release the buffer to
+  // make sure that other threads may start using this buffer.
+  endBufferIfFull();
+}
+
+} // namespace __xray_fdr_internal
+} // namespace __xray
+
+#endif // XRAY_XRAY_FDR_LOGGING_IMPL_H
diff --git a/lib/xray/xray_flags.cc b/lib/xray/xray_flags.cc
index 338c237..1ee4d10 100644
--- a/lib/xray/xray_flags.cc
+++ b/lib/xray/xray_flags.cc
@@ -24,31 +24,55 @@
 
 Flags xray_flags_dont_use_directly; // use via flags().
 
-void Flags::SetDefaults() XRAY_NEVER_INSTRUMENT {
+void Flags::setDefaults() XRAY_NEVER_INSTRUMENT {
 #define XRAY_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue;
 #include "xray_flags.inc"
 #undef XRAY_FLAG
 }
 
-static void RegisterXRayFlags(FlagParser *P, Flags *F) XRAY_NEVER_INSTRUMENT {
+static void registerXRayFlags(FlagParser *P, Flags *F) XRAY_NEVER_INSTRUMENT {
 #define XRAY_FLAG(Type, Name, DefaultValue, Description)                       \
   RegisterFlag(P, #Name, Description, &F->Name);
 #include "xray_flags.inc"
 #undef XRAY_FLAG
 }
 
-void InitializeFlags() XRAY_NEVER_INSTRUMENT {
+// This function, as defined with the help of a macro meant to be introduced at
+// build time of the XRay runtime, passes in a statically defined list of
+// options that control XRay. This means users/deployments can tweak the
+// defaults that override the hard-coded defaults in the xray_flags.inc at
+// compile-time using the XRAY_DEFAULT_OPTIONS macro.
+static const char *useCompilerDefinedFlags() XRAY_NEVER_INSTRUMENT {
+#ifdef XRAY_DEFAULT_OPTIONS
+// Do the double-layered string conversion to prevent badly crafted strings
+// provided through the XRAY_DEFAULT_OPTIONS from causing compilation issues (or
+// changing the semantics of the implementation through the macro). This ensures
+// that we convert whatever XRAY_DEFAULT_OPTIONS is defined as a string literal.
+#define XRAY_STRINGIZE(x) #x
+#define XRAY_STRINGIZE_OPTIONS(options) XRAY_STRINGIZE(options)
+  return XRAY_STRINGIZE_OPTIONS(XRAY_DEFAULT_OPTIONS);
+#else
+  return "";
+#endif
+}
+
+void initializeFlags() XRAY_NEVER_INSTRUMENT {
   SetCommonFlagsDefaults();
   auto *F = flags();
-  F->SetDefaults();
+  F->setDefaults();
 
   FlagParser XRayParser;
-  RegisterXRayFlags(&XRayParser, F);
+  registerXRayFlags(&XRayParser, F);
   RegisterCommonFlags(&XRayParser);
 
-  // Override from command line.
+  // Use options defaulted at compile-time for the runtime.
+  const char *XRayCompileFlags = useCompilerDefinedFlags();
+  XRayParser.ParseString(XRayCompileFlags);
+
+  // Override from environment variables.
   XRayParser.ParseString(GetEnv("XRAY_OPTIONS"));
 
+  // Override from command line.
   InitializeCommonFlags();
 
   if (Verbosity())
diff --git a/lib/xray/xray_flags.h b/lib/xray/xray_flags.h
index 2ecf5fb..f4e3028 100644
--- a/lib/xray/xray_flags.h
+++ b/lib/xray/xray_flags.h
@@ -24,13 +24,13 @@
 #include "xray_flags.inc"
 #undef XRAY_FLAG
 
-  void SetDefaults();
+  void setDefaults();
 };
 
 extern Flags xray_flags_dont_use_directly;
 inline Flags *flags() { return &xray_flags_dont_use_directly; }
 
-void InitializeFlags();
+void initializeFlags();
 
 } // namespace __xray
 
diff --git a/lib/xray/xray_flags.inc b/lib/xray/xray_flags.inc
index 0f6ced8..7ddce78 100644
--- a/lib/xray/xray_flags.inc
+++ b/lib/xray/xray_flags.inc
@@ -14,9 +14,14 @@
 #error "Define XRAY_FLAG prior to including this file!"
 #endif
 
-XRAY_FLAG(bool, patch_premain, true,
+XRAY_FLAG(bool, patch_premain, false,
           "Whether to patch instrumentation points before main.")
 XRAY_FLAG(bool, xray_naive_log, true,
           "Whether to install the naive log implementation.")
 XRAY_FLAG(const char *, xray_logfile_base, "xray-log.",
           "Filename base for the xray logfile.")
+XRAY_FLAG(bool, xray_fdr_log, false,
+          "Whether to install the flight data recorder logging implementation.")
+XRAY_FLAG(int, xray_fdr_log_func_duration_threshold_us, 5,
+          "FDR logging will try to skip functions that execute for fewer "
+          "microseconds than this threshold.")
diff --git a/lib/xray/xray_init.cc b/lib/xray/xray_init.cc
index eb86182..aa660ba 100644
--- a/lib/xray/xray_init.cc
+++ b/lib/xray/xray_init.cc
@@ -12,7 +12,6 @@
 // XRay initialisation logic.
 //===----------------------------------------------------------------------===//
 
-#include <atomic>
 #include <fcntl.h>
 #include <strings.h>
 #include <unistd.h>
@@ -26,9 +25,10 @@
 void __xray_init();
 extern const XRaySledEntry __start_xray_instr_map[] __attribute__((weak));
 extern const XRaySledEntry __stop_xray_instr_map[] __attribute__((weak));
+extern const XRayFunctionSledIndex __start_xray_fn_idx[] __attribute__((weak));
+extern const XRayFunctionSledIndex __stop_xray_fn_idx[] __attribute__((weak));
 }
 
-using namespace __sanitizer;
 using namespace __xray;
 
 // When set to 'true' this means the XRay runtime has been initialised. We use
@@ -38,29 +38,30 @@
 //
 // FIXME: Support DSO instrumentation maps too. The current solution only works
 // for statically linked executables.
-std::atomic<bool> XRayInitialized{false};
+__sanitizer::atomic_uint8_t XRayInitialized{0};
 
 // This should always be updated before XRayInitialized is updated.
-std::atomic<__xray::XRaySledMap> XRayInstrMap{};
+__sanitizer::SpinMutex XRayInstrMapMutex;
+XRaySledMap XRayInstrMap;
 
 // __xray_init() will do the actual loading of the current process' memory map
 // and then proceed to look for the .xray_instr_map section/segment.
 void __xray_init() XRAY_NEVER_INSTRUMENT {
-  InitializeFlags();
+  initializeFlags();
   if (__start_xray_instr_map == nullptr) {
     Report("XRay instrumentation map missing. Not initializing XRay.\n");
     return;
   }
 
-  // Now initialize the XRayInstrMap global struct with the address of the
-  // entries, reinterpreted as an array of XRaySledEntry objects. We use the
-  // virtual pointer we have from the section to provide us the correct
-  // information.
-  __xray::XRaySledMap SledMap{};
-  SledMap.Sleds = __start_xray_instr_map;
-  SledMap.Entries = __stop_xray_instr_map - __start_xray_instr_map;
-  XRayInstrMap.store(SledMap, std::memory_order_release);
-  XRayInitialized.store(true, std::memory_order_release);
+  {
+    __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex);
+    XRayInstrMap.Sleds = __start_xray_instr_map;
+    XRayInstrMap.Entries = __stop_xray_instr_map - __start_xray_instr_map;
+    XRayInstrMap.SledsIndex = __start_xray_fn_idx;
+    XRayInstrMap.Functions = __stop_xray_fn_idx - __start_xray_fn_idx;
+  }
+  __sanitizer::atomic_store(&XRayInitialized, true,
+                            __sanitizer::memory_order_release);
 
   if (flags()->patch_premain)
     __xray_patch();
diff --git a/lib/xray/xray_inmemory_log.cc b/lib/xray/xray_inmemory_log.cc
index adcb216..83aecfa 100644
--- a/lib/xray/xray_inmemory_log.cc
+++ b/lib/xray/xray_inmemory_log.cc
@@ -16,8 +16,6 @@
 //===----------------------------------------------------------------------===//
 
 #include <cassert>
-#include <cstdint>
-#include <cstdio>
 #include <fcntl.h>
 #include <mutex>
 #include <sys/stat.h>
@@ -26,19 +24,13 @@
 #include <thread>
 #include <unistd.h>
 
-#if defined(__x86_64__)
-#include "xray_x86_64.h"
-#elif defined(__arm__) || defined(__aarch64__)
-#include "xray_emulate_tsc.h"
-#else
-#error "Unsupported CPU Architecture"
-#endif /* Architecture-specific inline intrinsics */
-
 #include "sanitizer_common/sanitizer_libc.h"
 #include "xray/xray_records.h"
 #include "xray_defs.h"
 #include "xray_flags.h"
 #include "xray_interface_internal.h"
+#include "xray_tsc.h"
+#include "xray_utils.h"
 
 // __xray_InMemoryRawLog will use a thread-local aligned buffer capped to a
 // certain size (32kb by default) and use it as if it were a circular buffer for
@@ -53,25 +45,6 @@
 
 std::mutex LogMutex;
 
-static void retryingWriteAll(int Fd, char *Begin,
-                             char *End) XRAY_NEVER_INSTRUMENT {
-  if (Begin == End)
-    return;
-  auto TotalBytes = std::distance(Begin, End);
-  while (auto Written = write(Fd, Begin, TotalBytes)) {
-    if (Written < 0) {
-      if (errno == EINTR)
-        continue; // Try again.
-      Report("Failed to write; errno = %d\n", errno);
-      return;
-    }
-    TotalBytes -= Written;
-    if (TotalBytes == 0)
-      break;
-    Begin += Written;
-  }
-}
-
 class ThreadExitFlusher {
   int Fd;
   XRayRecord *Start;
@@ -102,41 +75,15 @@
 
 using namespace __xray;
 
-void PrintToStdErr(const char *Buffer) XRAY_NEVER_INSTRUMENT {
-  fprintf(stderr, "%s", Buffer);
-}
-
 static int __xray_OpenLogFile() XRAY_NEVER_INSTRUMENT {
-  // FIXME: Figure out how to make this less stderr-dependent.
-  SetPrintfAndReportCallback(PrintToStdErr);
-  // Open a temporary file once for the log.
-  static char TmpFilename[256] = {};
-  static char TmpWildcardPattern[] = "XXXXXX";
-  auto Argv = GetArgv();
-  const char *Progname = Argv[0] == nullptr ? "(unknown)" : Argv[0];
-  const char *LastSlash = internal_strrchr(Progname, '/');
-
-  if (LastSlash != nullptr)
-    Progname = LastSlash + 1;
-
-  const int HalfLength = sizeof(TmpFilename) / 2 - sizeof(TmpWildcardPattern);
-  int NeededLength = internal_snprintf(TmpFilename, sizeof(TmpFilename),
-                                       "%.*s%.*s.%s",
-                                       HalfLength, flags()->xray_logfile_base,
-                                       HalfLength, Progname,
-                                       TmpWildcardPattern);
-  if (NeededLength > int(sizeof(TmpFilename))) {
-    Report("XRay log file name too long (%d): %s\n", NeededLength, TmpFilename);
+  int F = getLogFD();
+  if (F == -1)
     return -1;
-  }
-  int Fd = mkstemp(TmpFilename);
-  if (Fd == -1) {
-    Report("XRay: Failed opening temporary file '%s'; not logging events.\n",
-           TmpFilename);
-    return -1;
-  }
-  if (Verbosity())
-    fprintf(stderr, "XRay: Log file in '%s'\n", TmpFilename);
+
+  // Test for required CPU features and cache the cycle frequency
+  static bool TSCSupported = probeRequiredCPUFeatures();
+  static uint64_t CycleFrequency = TSCSupported ? getTSCFrequency()
+                                   : __xray::NanosecondsPerSecond;
 
   // Since we're here, we get to write the header. We set it up so that the
   // header will only be written once, at the start, and let the threads
@@ -144,19 +91,20 @@
   XRayFileHeader Header;
   Header.Version = 1;
   Header.Type = FileTypes::NAIVE_LOG;
-  Header.CycleFrequency = __xray::cycleFrequency();
+  Header.CycleFrequency = CycleFrequency;
 
   // FIXME: Actually check whether we have 'constant_tsc' and 'nonstop_tsc'
   // before setting the values in the header.
   Header.ConstantTSC = 1;
   Header.NonstopTSC = 1;
-  retryingWriteAll(Fd, reinterpret_cast<char *>(&Header),
+  retryingWriteAll(F, reinterpret_cast<char *>(&Header),
                    reinterpret_cast<char *>(&Header) + sizeof(Header));
-  return Fd;
+  return F;
 }
 
-void __xray_InMemoryRawLog(int32_t FuncId,
-                           XRayEntryType Type) XRAY_NEVER_INSTRUMENT {
+template <class RDTSC>
+void __xray_InMemoryRawLog(int32_t FuncId, XRayEntryType Type,
+                           RDTSC ReadTSC) XRAY_NEVER_INSTRUMENT {
   using Buffer =
       std::aligned_storage<sizeof(XRayRecord), alignof(XRayRecord)>::type;
   static constexpr size_t BuffLen = 1024;
@@ -173,7 +121,7 @@
   // through a pointer offset.
   auto &R = reinterpret_cast<__xray::XRayRecord *>(InMemoryBuffer)[Offset];
   R.RecordType = RecordTypes::NORMAL;
-  R.TSC = __xray::readTSC(R.CPU);
+  R.TSC = ReadTSC(R.CPU);
   R.TId = TId;
   R.Type = Type;
   R.FuncId = FuncId;
@@ -187,8 +135,32 @@
   }
 }
 
-static auto Unused = [] {
+void __xray_InMemoryRawLogRealTSC(int32_t FuncId,
+                                  XRayEntryType Type) XRAY_NEVER_INSTRUMENT {
+  __xray_InMemoryRawLog(FuncId, Type, __xray::readTSC);
+}
+
+void __xray_InMemoryEmulateTSC(int32_t FuncId,
+                               XRayEntryType Type) XRAY_NEVER_INSTRUMENT {
+  __xray_InMemoryRawLog(FuncId, Type, [](uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+    timespec TS;
+    int result = clock_gettime(CLOCK_REALTIME, &TS);
+    if (result != 0) {
+      Report("clock_gettimg(2) return %d, errno=%d.", result, int(errno));
+      TS = {0, 0};
+    }
+    CPU = 0;
+    return TS.tv_sec * __xray::NanosecondsPerSecond + TS.tv_nsec;
+  });
+}
+
+static auto UNUSED Unused = [] {
+  auto UseRealTSC = probeRequiredCPUFeatures();
+  if (!UseRealTSC)
+    Report("WARNING: Required CPU features missing for XRay instrumentation, "
+           "using emulation instead.\n");
   if (flags()->xray_naive_log)
-    __xray_set_handler(__xray_InMemoryRawLog);
+    __xray_set_handler(UseRealTSC ? __xray_InMemoryRawLogRealTSC
+                                  : __xray_InMemoryEmulateTSC);
   return true;
 }();
diff --git a/lib/xray/xray_interface.cc b/lib/xray/xray_interface.cc
index 20a2b66..694d34c 100644
--- a/lib/xray/xray_interface.cc
+++ b/lib/xray/xray_interface.cc
@@ -15,7 +15,6 @@
 
 #include "xray_interface_internal.h"
 
-#include <atomic>
 #include <cstdint>
 #include <cstdio>
 #include <errno.h>
@@ -35,12 +34,24 @@
 static const int16_t cSledLength = 32;
 #elif defined(__arm__)
 static const int16_t cSledLength = 28;
+#elif SANITIZER_MIPS32
+static const int16_t cSledLength = 48;
+#elif SANITIZER_MIPS64
+static const int16_t cSledLength = 64;
+#elif defined(__powerpc64__)
+static const int16_t cSledLength = 8;
 #else
 #error "Unsupported CPU Architecture"
 #endif /* CPU architecture */
 
 // This is the function to call when we encounter the entry or exit sleds.
-std::atomic<void (*)(int32_t, XRayEntryType)> XRayPatchedFunction{nullptr};
+__sanitizer::atomic_uintptr_t XRayPatchedFunction{0};
+
+// This is the function to call from the arg1-enabled sleds/trampolines.
+__sanitizer::atomic_uintptr_t XRayArgLogger{0};
+
+// This is the function to call when we encounter a custom event log call.
+__sanitizer::atomic_uintptr_t XRayPatchedCustomEvent{0};
 
 // MProtectHelper is an RAII wrapper for calls to mprotect(...) that will undo
 // any successful mprotect(...) changes. This is used to make a page writeable
@@ -79,23 +90,45 @@
 
 } // namespace __xray
 
-extern std::atomic<bool> XRayInitialized;
-extern std::atomic<__xray::XRaySledMap> XRayInstrMap;
+extern __sanitizer::SpinMutex XRayInstrMapMutex;
+extern __sanitizer::atomic_uint8_t XRayInitialized;
+extern __xray::XRaySledMap XRayInstrMap;
 
 int __xray_set_handler(void (*entry)(int32_t,
                                      XRayEntryType)) XRAY_NEVER_INSTRUMENT {
-  if (XRayInitialized.load(std::memory_order_acquire)) {
-    __xray::XRayPatchedFunction.store(entry, std::memory_order_release);
+  if (__sanitizer::atomic_load(&XRayInitialized,
+                               __sanitizer::memory_order_acquire)) {
+
+    __sanitizer::atomic_store(&__xray::XRayPatchedFunction,
+                              reinterpret_cast<uintptr_t>(entry),
+                              __sanitizer::memory_order_release);
     return 1;
   }
   return 0;
 }
 
+int __xray_set_customevent_handler(void (*entry)(void *, size_t))
+    XRAY_NEVER_INSTRUMENT {
+  if (__sanitizer::atomic_load(&XRayInitialized,
+                               __sanitizer::memory_order_acquire)) {
+    __sanitizer::atomic_store(&__xray::XRayPatchedCustomEvent,
+                              reinterpret_cast<uintptr_t>(entry),
+                              __sanitizer::memory_order_release);
+    return 1;
+  }
+  return 0;
+}
+
+
 int __xray_remove_handler() XRAY_NEVER_INSTRUMENT {
   return __xray_set_handler(nullptr);
 }
 
-std::atomic<bool> XRayPatching{false};
+int __xray_remove_customevent_handler() XRAY_NEVER_INSTRUMENT {
+  return __xray_set_customevent_handler(nullptr);
+}
+
+__sanitizer::atomic_uint8_t XRayPatching{0};
 
 using namespace __xray;
 
@@ -115,34 +148,76 @@
 };
 
 template <class Function>
-CleanupInvoker<Function> ScopeCleanup(Function Fn) XRAY_NEVER_INSTRUMENT {
+CleanupInvoker<Function> scopeCleanup(Function Fn) XRAY_NEVER_INSTRUMENT {
   return CleanupInvoker<Function>{Fn};
 }
 
-// ControlPatching implements the common internals of the patching/unpatching
-// implementation. |Enable| defines whether we're enabling or disabling the
-// runtime XRay instrumentation.
-XRayPatchingStatus ControlPatching(bool Enable) XRAY_NEVER_INSTRUMENT {
-  if (!XRayInitialized.load(std::memory_order_acquire))
-    return XRayPatchingStatus::NOT_INITIALIZED; // Not initialized.
-
-  static bool NotPatching = false;
-  if (!XRayPatching.compare_exchange_strong(NotPatching, true,
-                                            std::memory_order_acq_rel,
-                                            std::memory_order_acquire)) {
-    return XRayPatchingStatus::ONGOING; // Already patching.
+inline bool patchSled(const XRaySledEntry &Sled, bool Enable,
+                      int32_t FuncId) XRAY_NEVER_INSTRUMENT {
+  // While we're here, we should patch the nop sled. To do that we mprotect
+  // the page containing the function to be writeable.
+  const uint64_t PageSize = GetPageSizeCached();
+  void *PageAlignedAddr =
+      reinterpret_cast<void *>(Sled.Address & ~(PageSize - 1));
+  std::size_t MProtectLen = (Sled.Address + cSledLength) -
+                            reinterpret_cast<uint64_t>(PageAlignedAddr);
+  MProtectHelper Protector(PageAlignedAddr, MProtectLen);
+  if (Protector.MakeWriteable() == -1) {
+    printf("Failed mprotect: %d\n", errno);
+    return XRayPatchingStatus::FAILED;
   }
 
-  bool PatchingSuccess = false;
-  auto XRayPatchingStatusResetter = ScopeCleanup([&PatchingSuccess] {
-    if (!PatchingSuccess) {
-      XRayPatching.store(false, std::memory_order_release);
-    }
+  bool Success = false;
+  switch (Sled.Kind) {
+  case XRayEntryType::ENTRY:
+    Success = patchFunctionEntry(Enable, FuncId, Sled, __xray_FunctionEntry);
+    break;
+  case XRayEntryType::EXIT:
+    Success = patchFunctionExit(Enable, FuncId, Sled);
+    break;
+  case XRayEntryType::TAIL:
+    Success = patchFunctionTailExit(Enable, FuncId, Sled);
+    break;
+  case XRayEntryType::LOG_ARGS_ENTRY:
+    Success = patchFunctionEntry(Enable, FuncId, Sled, __xray_ArgLoggerEntry);
+    break;
+  case XRayEntryType::CUSTOM_EVENT:
+    Success = patchCustomEvent(Enable, FuncId, Sled);
+    break;
+  default:
+    Report("Unsupported sled kind '%d' @%04x\n", Sled.Address, int(Sled.Kind));
+    return false;
+  }
+  return Success;
+}
+
+// controlPatching implements the common internals of the patching/unpatching
+// implementation. |Enable| defines whether we're enabling or disabling the
+// runtime XRay instrumentation.
+XRayPatchingStatus controlPatching(bool Enable) XRAY_NEVER_INSTRUMENT {
+  if (!__sanitizer::atomic_load(&XRayInitialized,
+                                __sanitizer::memory_order_acquire))
+    return XRayPatchingStatus::NOT_INITIALIZED; // Not initialized.
+
+  uint8_t NotPatching = false;
+  if (!__sanitizer::atomic_compare_exchange_strong(
+          &XRayPatching, &NotPatching, true, __sanitizer::memory_order_acq_rel))
+    return XRayPatchingStatus::ONGOING; // Already patching.
+
+  uint8_t PatchingSuccess = false;
+  auto XRayPatchingStatusResetter = scopeCleanup([&PatchingSuccess] {
+    if (!PatchingSuccess)
+      __sanitizer::atomic_store(&XRayPatching, false,
+                                __sanitizer::memory_order_release);
   });
 
   // Step 1: Compute the function id, as a unique identifier per function in the
   // instrumentation map.
-  XRaySledMap InstrMap = XRayInstrMap.load(std::memory_order_acquire);
+  XRaySledMap InstrMap;
+  {
+    __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex);
+    InstrMap = XRayInstrMap;
+  }
   if (InstrMap.Entries == 0)
     return XRayPatchingStatus::NOT_INITIALIZED;
 
@@ -163,45 +238,110 @@
       ++FuncId;
       CurFun = F;
     }
-
-    // While we're here, we should patch the nop sled. To do that we mprotect
-    // the page containing the function to be writeable.
-    void *PageAlignedAddr =
-        reinterpret_cast<void *>(Sled.Address & ~(PageSize - 1));
-    std::size_t MProtectLen = (Sled.Address + cSledLength) -
-                              reinterpret_cast<uint64_t>(PageAlignedAddr);
-    MProtectHelper Protector(PageAlignedAddr, MProtectLen);
-    if (Protector.MakeWriteable() == -1) {
-      printf("Failed mprotect: %d\n", errno);
-      return XRayPatchingStatus::FAILED;
-    }
-
-    bool Success = false;
-    switch (Sled.Kind) {
-    case XRayEntryType::ENTRY:
-      Success = patchFunctionEntry(Enable, FuncId, Sled);
-      break;
-    case XRayEntryType::EXIT:
-      Success = patchFunctionExit(Enable, FuncId, Sled);
-      break;
-    case XRayEntryType::TAIL:
-      Success = patchFunctionTailExit(Enable, FuncId, Sled);
-      break;
-    default:
-      Report("Unsupported sled kind: %d\n", int(Sled.Kind));
-      continue;
-    }
-    (void)Success;
+    patchSled(Sled, Enable, FuncId);
   }
-  XRayPatching.store(false, std::memory_order_release);
+  __sanitizer::atomic_store(&XRayPatching, false,
+                            __sanitizer::memory_order_release);
   PatchingSuccess = true;
   return XRayPatchingStatus::SUCCESS;
 }
 
 XRayPatchingStatus __xray_patch() XRAY_NEVER_INSTRUMENT {
-  return ControlPatching(true);
+  return controlPatching(true);
 }
 
 XRayPatchingStatus __xray_unpatch() XRAY_NEVER_INSTRUMENT {
-  return ControlPatching(false);
+  return controlPatching(false);
+}
+
+XRayPatchingStatus patchFunction(int32_t FuncId,
+                                 bool Enable) XRAY_NEVER_INSTRUMENT {
+  if (!__sanitizer::atomic_load(&XRayInitialized,
+                                __sanitizer::memory_order_acquire))
+    return XRayPatchingStatus::NOT_INITIALIZED; // Not initialized.
+
+  uint8_t NotPatching = false;
+  if (!__sanitizer::atomic_compare_exchange_strong(
+          &XRayPatching, &NotPatching, true, __sanitizer::memory_order_acq_rel))
+    return XRayPatchingStatus::ONGOING; // Already patching.
+
+  // Next, we look for the function index.
+  XRaySledMap InstrMap;
+  {
+    __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex);
+    InstrMap = XRayInstrMap;
+  }
+
+  // If we don't have an index, we can't patch individual functions.
+  if (InstrMap.Functions == 0)
+    return XRayPatchingStatus::NOT_INITIALIZED;
+
+  // FuncId must be a positive number, less than the number of functions
+  // instrumented.
+  if (FuncId <= 0 || static_cast<size_t>(FuncId) > InstrMap.Functions) {
+    Report("Invalid function id provided: %d\n", FuncId);
+    return XRayPatchingStatus::FAILED;
+  }
+
+  // Now we patch ths sleds for this specific function.
+  auto SledRange = InstrMap.SledsIndex[FuncId - 1];
+  auto *f = SledRange.Begin;
+  auto *e = SledRange.End;
+
+  bool SucceedOnce = false;
+  while (f != e)
+    SucceedOnce |= patchSled(*f++, Enable, FuncId);
+
+  __sanitizer::atomic_store(&XRayPatching, false,
+                            __sanitizer::memory_order_release);
+
+  if (!SucceedOnce) {
+    Report("Failed patching any sled for function '%d'.", FuncId);
+    return XRayPatchingStatus::FAILED;
+  }
+
+  return XRayPatchingStatus::SUCCESS;
+}
+
+XRayPatchingStatus __xray_patch_function(int32_t FuncId) XRAY_NEVER_INSTRUMENT {
+  return patchFunction(FuncId, true);
+}
+
+XRayPatchingStatus
+__xray_unpatch_function(int32_t FuncId) XRAY_NEVER_INSTRUMENT {
+  return patchFunction(FuncId, false);
+}
+
+int __xray_set_handler_arg1(void (*entry)(int32_t, XRayEntryType, uint64_t)) {
+  if (!__sanitizer::atomic_load(&XRayInitialized,
+                                __sanitizer::memory_order_acquire))
+    return 0;
+
+  // A relaxed write might not be visible even if the current thread gets
+  // scheduled on a different CPU/NUMA node.  We need to wait for everyone to
+  // have this handler installed for consistency of collected data across CPUs.
+  __sanitizer::atomic_store(&XRayArgLogger, reinterpret_cast<uint64_t>(entry),
+                            __sanitizer::memory_order_release);
+  return 1;
+}
+
+int __xray_remove_handler_arg1() { return __xray_set_handler_arg1(nullptr); }
+
+uintptr_t __xray_function_address(int32_t FuncId) XRAY_NEVER_INSTRUMENT {
+  __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex);
+  if (FuncId <= 0 || static_cast<size_t>(FuncId) > XRayInstrMap.Functions)
+    return 0;
+  return XRayInstrMap.SledsIndex[FuncId - 1].Begin->Address
+// On PPC, function entries are always aligned to 16 bytes. The beginning of a
+// sled might be a local entry, which is always +8 based on the global entry.
+// Always return the global entry.
+#ifdef __PPC__
+         & ~0xf
+#endif
+      ;
+}
+
+size_t __xray_max_function_id() XRAY_NEVER_INSTRUMENT {
+  __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex);
+  return XRayInstrMap.Functions;
 }
diff --git a/lib/xray/xray_interface_internal.h b/lib/xray/xray_interface_internal.h
index a8434a6..4a27846 100644
--- a/lib/xray/xray_interface_internal.h
+++ b/lib/xray/xray_interface_internal.h
@@ -39,6 +39,11 @@
 #error "Unsupported word size."
 #endif
 };
+
+struct XRayFunctionSledIndex {
+  const XRaySledEntry* Begin;
+  const XRaySledEntry* End;
+};
 }
 
 namespace __xray {
@@ -46,15 +51,16 @@
 struct XRaySledMap {
   const XRaySledEntry *Sleds;
   size_t Entries;
+  const XRayFunctionSledIndex *SledsIndex;
+  size_t Functions;
 };
 
-uint64_t cycleFrequency();
-
 bool patchFunctionEntry(bool Enable, uint32_t FuncId,
-                        const XRaySledEntry &Sled);
+                        const XRaySledEntry &Sled, void (*Trampoline)());
 bool patchFunctionExit(bool Enable, uint32_t FuncId, const XRaySledEntry &Sled);
 bool patchFunctionTailExit(bool Enable, uint32_t FuncId,
                            const XRaySledEntry &Sled);
+bool patchCustomEvent(bool Enable, uint32_t FuncId, const XRaySledEntry &Sled);
 
 } // namespace __xray
 
@@ -64,6 +70,8 @@
 extern void __xray_FunctionEntry();
 extern void __xray_FunctionExit();
 extern void __xray_FunctionTailExit();
+extern void __xray_ArgLoggerEntry();
+extern void __xray_CustomEvent();
 }
 
 #endif
diff --git a/lib/xray/xray_log_interface.cc b/lib/xray/xray_log_interface.cc
new file mode 100644
index 0000000..ee14ae4
--- /dev/null
+++ b/lib/xray/xray_log_interface.cc
@@ -0,0 +1,69 @@
+//===-- xray_log_interface.cc ---------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a function call tracing system.
+//
+//===----------------------------------------------------------------------===//
+#include "xray/xray_log_interface.h"
+
+#include "sanitizer_common/sanitizer_atomic.h"
+#include "sanitizer_common/sanitizer_mutex.h"
+#include "xray/xray_interface.h"
+#include "xray_defs.h"
+
+#include <memory>
+
+__sanitizer::SpinMutex XRayImplMutex;
+std::unique_ptr<XRayLogImpl> GlobalXRayImpl;
+
+void __xray_set_log_impl(XRayLogImpl Impl) XRAY_NEVER_INSTRUMENT {
+  if (Impl.log_init == nullptr || Impl.log_finalize == nullptr ||
+      Impl.handle_arg0 == nullptr || Impl.flush_log == nullptr) {
+    __sanitizer::SpinMutexLock Guard(&XRayImplMutex);
+    GlobalXRayImpl.reset();
+    __xray_remove_handler();
+    __xray_remove_handler_arg1();
+    return;
+  }
+
+  __sanitizer::SpinMutexLock Guard(&XRayImplMutex);
+  GlobalXRayImpl.reset(new XRayLogImpl);
+  *GlobalXRayImpl = Impl;
+  __xray_set_handler(Impl.handle_arg0);
+}
+
+void __xray_remove_log_impl() XRAY_NEVER_INSTRUMENT {
+  __sanitizer::SpinMutexLock Guard(&XRayImplMutex);
+  GlobalXRayImpl.reset();
+  __xray_remove_handler();
+  __xray_remove_handler_arg1();
+}
+
+XRayLogInitStatus __xray_log_init(size_t BufferSize, size_t MaxBuffers,
+                                  void *Args,
+                                  size_t ArgsSize) XRAY_NEVER_INSTRUMENT {
+  __sanitizer::SpinMutexLock Guard(&XRayImplMutex);
+  if (!GlobalXRayImpl)
+    return XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
+  return GlobalXRayImpl->log_init(BufferSize, MaxBuffers, Args, ArgsSize);
+}
+
+XRayLogInitStatus __xray_log_finalize() XRAY_NEVER_INSTRUMENT {
+  __sanitizer::SpinMutexLock Guard(&XRayImplMutex);
+  if (!GlobalXRayImpl)
+    return XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
+  return GlobalXRayImpl->log_finalize();
+}
+
+XRayLogFlushStatus __xray_log_flushLog() XRAY_NEVER_INSTRUMENT {
+  __sanitizer::SpinMutexLock Guard(&XRayImplMutex);
+  if (!GlobalXRayImpl)
+    return XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING;
+  return GlobalXRayImpl->flush_log();
+}
diff --git a/lib/xray/xray_mips.cc b/lib/xray/xray_mips.cc
new file mode 100644
index 0000000..cd86330
--- /dev/null
+++ b/lib/xray/xray_mips.cc
@@ -0,0 +1,165 @@
+//===-- xray_mips.cc --------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// Implementation of MIPS-specific routines (32-bit).
+//
+//===----------------------------------------------------------------------===//
+#include "sanitizer_common/sanitizer_common.h"
+#include "xray_defs.h"
+#include "xray_interface_internal.h"
+#include <atomic>
+
+namespace __xray {
+
+// The machine codes for some instructions used in runtime patching.
+enum PatchOpcodes : uint32_t {
+  PO_ADDIU = 0x24000000, // addiu rt, rs, imm
+  PO_SW = 0xAC000000,    // sw rt, offset(sp)
+  PO_LUI = 0x3C000000,   // lui rs, %hi(address)
+  PO_ORI = 0x34000000,   // ori rt, rs, %lo(address)
+  PO_JALR = 0x0000F809,  // jalr rs
+  PO_LW = 0x8C000000,    // lw rt, offset(address)
+  PO_B44 = 0x1000000b,   // b #44
+  PO_NOP = 0x0,          // nop
+};
+
+enum RegNum : uint32_t {
+  RN_T0 = 0x8,
+  RN_T9 = 0x19,
+  RN_RA = 0x1F,
+  RN_SP = 0x1D,
+};
+
+inline static uint32_t encodeInstruction(uint32_t Opcode, uint32_t Rs,
+                                         uint32_t Rt,
+                                         uint32_t Imm) XRAY_NEVER_INSTRUMENT {
+  return (Opcode | Rs << 21 | Rt << 16 | Imm);
+}
+
+inline static uint32_t
+encodeSpecialInstruction(uint32_t Opcode, uint32_t Rs, uint32_t Rt, uint32_t Rd,
+                         uint32_t Imm) XRAY_NEVER_INSTRUMENT {
+  return (Rs << 21 | Rt << 16 | Rd << 11 | Imm << 6 | Opcode);
+}
+
+inline static bool patchSled(const bool Enable, const uint32_t FuncId,
+                             const XRaySledEntry &Sled,
+                             void (*TracingHook)()) XRAY_NEVER_INSTRUMENT {
+  // When |Enable| == true,
+  // We replace the following compile-time stub (sled):
+  //
+  // xray_sled_n:
+  //	B .tmpN
+  //	11 NOPs (44 bytes)
+  //	.tmpN
+  //	ADDIU T9, T9, 44
+  //
+  // With the following runtime patch:
+  //
+  // xray_sled_n (32-bit):
+  //    addiu sp, sp, -8                        ;create stack frame
+  //    nop
+  //    sw ra, 4(sp)                            ;save return address
+  //    sw t9, 0(sp)                            ;save register t9
+  //    lui t9, %hi(__xray_FunctionEntry/Exit)
+  //    ori t9, t9, %lo(__xray_FunctionEntry/Exit)
+  //    lui t0, %hi(function_id)
+  //    jalr t9                                 ;call Tracing hook
+  //    ori t0, t0, %lo(function_id)            ;pass function id (delay slot)
+  //    lw t9, 0(sp)                            ;restore register t9
+  //    lw ra, 4(sp)                            ;restore return address
+  //    addiu sp, sp, 8                         ;delete stack frame
+  //
+  // We add 44 bytes to t9 because we want to adjust the function pointer to
+  // the actual start of function i.e. the address just after the noop sled.
+  // We do this because gp displacement relocation is emitted at the start of
+  // of the function i.e after the nop sled and to correctly calculate the
+  // global offset table address, t9 must hold the address of the instruction
+  // containing the gp displacement relocation.
+  // FIXME: Is this correct for the static relocation model?
+  //
+  // Replacement of the first 4-byte instruction should be the last and atomic
+  // operation, so that the user code which reaches the sled concurrently
+  // either jumps over the whole sled, or executes the whole sled when the
+  // latter is ready.
+  //
+  // When |Enable|==false, we set back the first instruction in the sled to be
+  //   B #44
+
+  if (Enable) {
+    uint32_t LoTracingHookAddr =
+        reinterpret_cast<int32_t>(TracingHook) & 0xffff;
+    uint32_t HiTracingHookAddr =
+        (reinterpret_cast<int32_t>(TracingHook) >> 16) & 0xffff;
+    uint32_t LoFunctionID = FuncId & 0xffff;
+    uint32_t HiFunctionID = (FuncId >> 16) & 0xffff;
+    *reinterpret_cast<uint32_t *>(Sled.Address + 8) = encodeInstruction(
+        PatchOpcodes::PO_SW, RegNum::RN_SP, RegNum::RN_RA, 0x4);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 12) = encodeInstruction(
+        PatchOpcodes::PO_SW, RegNum::RN_SP, RegNum::RN_T9, 0x0);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 16) = encodeInstruction(
+        PatchOpcodes::PO_LUI, 0x0, RegNum::RN_T9, HiTracingHookAddr);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 20) = encodeInstruction(
+        PatchOpcodes::PO_ORI, RegNum::RN_T9, RegNum::RN_T9, LoTracingHookAddr);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 24) = encodeInstruction(
+        PatchOpcodes::PO_LUI, 0x0, RegNum::RN_T0, HiFunctionID);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 28) = encodeSpecialInstruction(
+        PatchOpcodes::PO_JALR, RegNum::RN_T9, 0x0, RegNum::RN_RA, 0X0);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 32) = encodeInstruction(
+        PatchOpcodes::PO_ORI, RegNum::RN_T0, RegNum::RN_T0, LoFunctionID);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 36) = encodeInstruction(
+        PatchOpcodes::PO_LW, RegNum::RN_SP, RegNum::RN_T9, 0x0);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 40) = encodeInstruction(
+        PatchOpcodes::PO_LW, RegNum::RN_SP, RegNum::RN_RA, 0x4);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 44) = encodeInstruction(
+        PatchOpcodes::PO_ADDIU, RegNum::RN_SP, RegNum::RN_SP, 0x8);
+    uint32_t CreateStackSpaceInstr = encodeInstruction(
+        PatchOpcodes::PO_ADDIU, RegNum::RN_SP, RegNum::RN_SP, 0xFFF8);
+    std::atomic_store_explicit(
+        reinterpret_cast<std::atomic<uint32_t> *>(Sled.Address),
+        uint32_t(CreateStackSpaceInstr), std::memory_order_release);
+  } else {
+    std::atomic_store_explicit(
+        reinterpret_cast<std::atomic<uint32_t> *>(Sled.Address),
+        uint32_t(PatchOpcodes::PO_B44), std::memory_order_release);
+  }
+  return true;
+}
+
+bool patchFunctionEntry(const bool Enable, const uint32_t FuncId,
+                        const XRaySledEntry &Sled,
+                        void (*Trampoline)()) XRAY_NEVER_INSTRUMENT {
+  return patchSled(Enable, FuncId, Sled, Trampoline);
+}
+
+bool patchFunctionExit(const bool Enable, const uint32_t FuncId,
+                       const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  return patchSled(Enable, FuncId, Sled, __xray_FunctionExit);
+}
+
+bool patchFunctionTailExit(const bool Enable, const uint32_t FuncId,
+                           const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  // FIXME: In the future we'd need to distinguish between non-tail exits and
+  // tail exits for better information preservation.
+  return patchSled(Enable, FuncId, Sled, __xray_FunctionExit);
+}
+
+bool patchCustomEvent(const bool Enable, const uint32_t FuncId,
+                      const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  // FIXME: Implement in mips?
+  return false;
+}
+
+} // namespace __xray
+
+extern "C" void __xray_ArgLoggerEntry() XRAY_NEVER_INSTRUMENT {
+  // FIXME: this will have to be implemented in the trampoline assembly file
+}
diff --git a/lib/xray/xray_mips64.cc b/lib/xray/xray_mips64.cc
new file mode 100644
index 0000000..fa8fdd5
--- /dev/null
+++ b/lib/xray/xray_mips64.cc
@@ -0,0 +1,173 @@
+//===-- xray_mips64.cc ------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// Implementation of MIPS64-specific routines.
+//
+//===----------------------------------------------------------------------===//
+#include "sanitizer_common/sanitizer_common.h"
+#include "xray_defs.h"
+#include "xray_interface_internal.h"
+#include <atomic>
+
+namespace __xray {
+
+// The machine codes for some instructions used in runtime patching.
+enum PatchOpcodes : uint32_t {
+  PO_DADDIU = 0x64000000, // daddiu rt, rs, imm
+  PO_SD = 0xFC000000,     // sd rt, base(offset)
+  PO_LUI = 0x3C000000,    // lui rt, imm
+  PO_ORI = 0x34000000,    // ori rt, rs, imm
+  PO_DSLL = 0x00000038,   // dsll rd, rt, sa
+  PO_JALR = 0x00000009,   // jalr rs
+  PO_LD = 0xDC000000,     // ld rt, base(offset)
+  PO_B60 = 0x1000000f,    // b #60
+  PO_NOP = 0x0,           // nop
+};
+
+enum RegNum : uint32_t {
+  RN_T0 = 0xC,
+  RN_T9 = 0x19,
+  RN_RA = 0x1F,
+  RN_SP = 0x1D,
+};
+
+inline static uint32_t encodeInstruction(uint32_t Opcode, uint32_t Rs,
+                                         uint32_t Rt,
+                                         uint32_t Imm) XRAY_NEVER_INSTRUMENT {
+  return (Opcode | Rs << 21 | Rt << 16 | Imm);
+}
+
+inline static uint32_t
+encodeSpecialInstruction(uint32_t Opcode, uint32_t Rs, uint32_t Rt, uint32_t Rd,
+                         uint32_t Imm) XRAY_NEVER_INSTRUMENT {
+  return (Rs << 21 | Rt << 16 | Rd << 11 | Imm << 6 | Opcode);
+}
+
+inline static bool patchSled(const bool Enable, const uint32_t FuncId,
+                             const XRaySledEntry &Sled,
+                             void (*TracingHook)()) XRAY_NEVER_INSTRUMENT {
+  // When |Enable| == true,
+  // We replace the following compile-time stub (sled):
+  //
+  // xray_sled_n:
+  //	B .tmpN
+  //	15 NOPs (60 bytes)
+  //	.tmpN
+  //
+  // With the following runtime patch:
+  //
+  // xray_sled_n (64-bit):
+  //    daddiu sp, sp, -16                      ;create stack frame
+  //    nop
+  //    sd ra, 8(sp)                            ;save return address
+  //    sd t9, 0(sp)                            ;save register t9
+  //    lui t9, %highest(__xray_FunctionEntry/Exit)
+  //    ori t9, t9, %higher(__xray_FunctionEntry/Exit)
+  //    dsll t9, t9, 16
+  //    ori t9, t9, %hi(__xray_FunctionEntry/Exit)
+  //    dsll t9, t9, 16
+  //    ori t9, t9, %lo(__xray_FunctionEntry/Exit)
+  //    lui t0, %hi(function_id)
+  //    jalr t9                                 ;call Tracing hook
+  //    ori t0, t0, %lo(function_id)            ;pass function id (delay slot)
+  //    ld t9, 0(sp)                            ;restore register t9
+  //    ld ra, 8(sp)                            ;restore return address
+  //    daddiu sp, sp, 16                       ;delete stack frame
+  //
+  // Replacement of the first 4-byte instruction should be the last and atomic
+  // operation, so that the user code which reaches the sled concurrently
+  // either jumps over the whole sled, or executes the whole sled when the
+  // latter is ready.
+  //
+  // When |Enable|==false, we set back the first instruction in the sled to be
+  //   B #60
+
+  if (Enable) {
+    uint32_t LoTracingHookAddr =
+        reinterpret_cast<int64_t>(TracingHook) & 0xffff;
+    uint32_t HiTracingHookAddr =
+        (reinterpret_cast<int64_t>(TracingHook) >> 16) & 0xffff;
+    uint32_t HigherTracingHookAddr =
+        (reinterpret_cast<int64_t>(TracingHook) >> 32) & 0xffff;
+    uint32_t HighestTracingHookAddr =
+        (reinterpret_cast<int64_t>(TracingHook) >> 48) & 0xffff;
+    uint32_t LoFunctionID = FuncId & 0xffff;
+    uint32_t HiFunctionID = (FuncId >> 16) & 0xffff;
+    *reinterpret_cast<uint32_t *>(Sled.Address + 8) = encodeInstruction(
+        PatchOpcodes::PO_SD, RegNum::RN_SP, RegNum::RN_RA, 0x8);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 12) = encodeInstruction(
+        PatchOpcodes::PO_SD, RegNum::RN_SP, RegNum::RN_T9, 0x0);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 16) = encodeInstruction(
+        PatchOpcodes::PO_LUI, 0x0, RegNum::RN_T9, HighestTracingHookAddr);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 20) =
+        encodeInstruction(PatchOpcodes::PO_ORI, RegNum::RN_T9, RegNum::RN_T9,
+                          HigherTracingHookAddr);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 24) = encodeSpecialInstruction(
+        PatchOpcodes::PO_DSLL, 0x0, RegNum::RN_T9, RegNum::RN_T9, 0x10);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 28) = encodeInstruction(
+        PatchOpcodes::PO_ORI, RegNum::RN_T9, RegNum::RN_T9, HiTracingHookAddr);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 32) = encodeSpecialInstruction(
+        PatchOpcodes::PO_DSLL, 0x0, RegNum::RN_T9, RegNum::RN_T9, 0x10);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 36) = encodeInstruction(
+        PatchOpcodes::PO_ORI, RegNum::RN_T9, RegNum::RN_T9, LoTracingHookAddr);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 40) = encodeInstruction(
+        PatchOpcodes::PO_LUI, 0x0, RegNum::RN_T0, HiFunctionID);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 44) = encodeSpecialInstruction(
+        PatchOpcodes::PO_JALR, RegNum::RN_T9, 0x0, RegNum::RN_RA, 0X0);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 48) = encodeInstruction(
+        PatchOpcodes::PO_ORI, RegNum::RN_T0, RegNum::RN_T0, LoFunctionID);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 52) = encodeInstruction(
+        PatchOpcodes::PO_LD, RegNum::RN_SP, RegNum::RN_T9, 0x0);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 56) = encodeInstruction(
+        PatchOpcodes::PO_LD, RegNum::RN_SP, RegNum::RN_RA, 0x8);
+    *reinterpret_cast<uint32_t *>(Sled.Address + 60) = encodeInstruction(
+        PatchOpcodes::PO_DADDIU, RegNum::RN_SP, RegNum::RN_SP, 0x10);
+    uint32_t CreateStackSpace = encodeInstruction(
+        PatchOpcodes::PO_DADDIU, RegNum::RN_SP, RegNum::RN_SP, 0xfff0);
+    std::atomic_store_explicit(
+        reinterpret_cast<std::atomic<uint32_t> *>(Sled.Address),
+        CreateStackSpace, std::memory_order_release);
+  } else {
+    std::atomic_store_explicit(
+        reinterpret_cast<std::atomic<uint32_t> *>(Sled.Address),
+        uint32_t(PatchOpcodes::PO_B60), std::memory_order_release);
+  }
+  return true;
+}
+
+bool patchFunctionEntry(const bool Enable, const uint32_t FuncId,
+                        const XRaySledEntry &Sled,
+                        void (*Trampoline)()) XRAY_NEVER_INSTRUMENT {
+  return patchSled(Enable, FuncId, Sled, Trampoline);
+}
+
+bool patchFunctionExit(const bool Enable, const uint32_t FuncId,
+                       const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  return patchSled(Enable, FuncId, Sled, __xray_FunctionExit);
+}
+
+bool patchFunctionTailExit(const bool Enable, const uint32_t FuncId,
+                           const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  // FIXME: In the future we'd need to distinguish between non-tail exits and
+  // tail exits for better information preservation.
+  return patchSled(Enable, FuncId, Sled, __xray_FunctionExit);
+}
+
+bool patchCustomEvent(const bool Enable, const uint32_t FuncId,
+                      const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  // FIXME: Implement in mips64?
+  return false;
+}
+} // namespace __xray
+
+extern "C" void __xray_ArgLoggerEntry() XRAY_NEVER_INSTRUMENT {
+  // FIXME: this will have to be implemented in the trampoline assembly file
+}
diff --git a/lib/xray/xray_never_instrument.txt b/lib/xray/xray_never_instrument.txt
new file mode 100644
index 0000000..7fa48dd
--- /dev/null
+++ b/lib/xray/xray_never_instrument.txt
@@ -0,0 +1,6 @@
+# List of function matchers common to C/C++ applications that make sense to
+# never instrument. You can use this as an argument to
+# -fxray-never-instrument=<path> along with your project-specific lists.
+
+# Never instrument any function whose symbol starts with __xray.
+fun:__xray*
diff --git a/lib/xray/xray_powerpc64.cc b/lib/xray/xray_powerpc64.cc
new file mode 100644
index 0000000..ab03cb1
--- /dev/null
+++ b/lib/xray/xray_powerpc64.cc
@@ -0,0 +1,106 @@
+//===-- xray_powerpc64.cc ---------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// Implementation of powerpc64 and powerpc64le routines.
+//
+//===----------------------------------------------------------------------===//
+#include "sanitizer_common/sanitizer_common.h"
+#include "xray_defs.h"
+#include "xray_interface_internal.h"
+#include "xray_utils.h"
+#include <atomic>
+#include <cassert>
+#include <cstring>
+
+#ifndef __LITTLE_ENDIAN__
+#error powerpc64 big endian is not supported for now.
+#endif
+
+namespace {
+
+constexpr unsigned long long JumpOverInstNum = 7;
+
+void clearCache(void *Addr, size_t Len) {
+  const size_t LineSize = 32;
+
+  const intptr_t Mask = ~(LineSize - 1);
+  const intptr_t StartLine = ((intptr_t)Addr) & Mask;
+  const intptr_t EndLine = ((intptr_t)Addr + Len + LineSize - 1) & Mask;
+
+  for (intptr_t Line = StartLine; Line < EndLine; Line += LineSize)
+    asm volatile("dcbf 0, %0" : : "r"(Line));
+  asm volatile("sync");
+
+  for (intptr_t Line = StartLine; Line < EndLine; Line += LineSize)
+    asm volatile("icbi 0, %0" : : "r"(Line));
+  asm volatile("isync");
+}
+
+} // namespace
+
+extern "C" void __clear_cache(void *start, void *end);
+
+namespace __xray {
+
+bool patchFunctionEntry(const bool Enable, uint32_t FuncId,
+                        const XRaySledEntry &Sled,
+                        void (*Trampoline)()) XRAY_NEVER_INSTRUMENT {
+  if (Enable) {
+    // lis 0, FuncId[16..32]
+    // li 0, FuncId[0..15]
+    *reinterpret_cast<uint64_t *>(Sled.Address) =
+        (0x3c000000ull + (FuncId >> 16)) +
+        ((0x60000000ull + (FuncId & 0xffff)) << 32);
+  } else {
+    // b +JumpOverInstNum instructions.
+    *reinterpret_cast<uint32_t *>(Sled.Address) =
+        0x48000000ull + (JumpOverInstNum << 2);
+  }
+  clearCache(reinterpret_cast<void *>(Sled.Address), 8);
+  return true;
+}
+
+bool patchFunctionExit(const bool Enable, uint32_t FuncId,
+                       const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  if (Enable) {
+    // lis 0, FuncId[16..32]
+    // li 0, FuncId[0..15]
+    *reinterpret_cast<uint64_t *>(Sled.Address) =
+        (0x3c000000ull + (FuncId >> 16)) +
+        ((0x60000000ull + (FuncId & 0xffff)) << 32);
+  } else {
+    // Copy the blr/b instruction after JumpOverInstNum instructions.
+    *reinterpret_cast<uint32_t *>(Sled.Address) =
+        *(reinterpret_cast<uint32_t *>(Sled.Address) + JumpOverInstNum);
+  }
+  clearCache(reinterpret_cast<void *>(Sled.Address), 8);
+  return true;
+}
+
+bool patchFunctionTailExit(const bool Enable, const uint32_t FuncId,
+                           const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  return patchFunctionExit(Enable, FuncId, Sled);
+}
+
+// FIXME: Maybe implement this better?
+bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT { return true; }
+
+bool patchCustomEvent(const bool Enable, const uint32_t FuncId,
+                      const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  // FIXME: Implement in powerpc64?
+  return false;
+}
+
+} // namespace __xray
+
+extern "C" void __xray_ArgLoggerEntry() XRAY_NEVER_INSTRUMENT {
+  // FIXME: this will have to be implemented in the trampoline assembly file
+}
diff --git a/lib/xray/xray_powerpc64.inc b/lib/xray/xray_powerpc64.inc
new file mode 100644
index 0000000..c1a1bac
--- /dev/null
+++ b/lib/xray/xray_powerpc64.inc
@@ -0,0 +1,37 @@
+//===-- xray_powerpc64.inc --------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstdint>
+#include <mutex>
+#include <sys/platform/ppc.h>
+
+#include "xray_defs.h"
+
+namespace __xray {
+
+ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+  CPU = 0;
+  return __ppc_get_timebase();
+}
+
+inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+  static std::mutex M;
+  std::lock_guard<std::mutex> Guard(M);
+  return __ppc_get_timebase_freq();
+}
+
+inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
+  return true;
+}
+
+} // namespace __xray
diff --git a/lib/xray/xray_trampoline_AArch64.S b/lib/xray/xray_trampoline_AArch64.S
index f1a471c..4d1b04f 100644
--- a/lib/xray/xray_trampoline_AArch64.S
+++ b/lib/xray/xray_trampoline_AArch64.S
@@ -1,3 +1,5 @@
+#include "../builtins/assembly.h"
+
     .text
     /* The variable containing the handler function pointer */
     .global _ZN6__xray19XRayPatchedFunctionE
@@ -87,3 +89,56 @@
     LDP X3, X4, [SP], #16
     LDP X1, X2, [SP], #16
     RET
+
+    /* Word-aligned function entry point */
+    .p2align 2
+    /* Let C/C++ see the symbol */
+    .global __xray_FunctionTailExit
+    .type __xray_FunctionTailExit, %function
+    /* In C++ it is void extern "C" __xray_FunctionTailExit(uint32_t FuncId)
+         with FuncId passed in W0 register. */
+__xray_FunctionTailExit:
+    /* Move the return address beyond the end of sled data. The 12 bytes of
+         data are inserted in the code of the runtime patch, between the call
+         instruction and the instruction returned into. The data contains 32
+         bits of instrumented function ID and 64 bits of the address of
+         the current trampoline. */
+    ADD X30, X30, #12
+    /* Push the registers which may be modified by the handler function */
+    STP X1, X2, [SP, #-16]!
+    STP X3, X4, [SP, #-16]!
+    STP X5, X6, [SP, #-16]!
+    STP X7, X30, [SP, #-16]!
+    /* Push the parameters of the tail called function */
+    STP Q0, Q1, [SP, #-32]!
+    STP Q2, Q3, [SP, #-32]!
+    STP Q4, Q5, [SP, #-32]!
+    STP Q6, Q7, [SP, #-32]!
+    /* Load the address of _ZN6__xray19XRayPatchedFunctionE into X1 */
+    LDR X1, =_ZN6__xray19XRayPatchedFunctionE
+    /* Load the handler function pointer into X2 */
+    LDR X2, [X1]
+    /* Handler address is nullptr if handler is not set */
+    CMP X2, #0
+    BEQ FunctionTailExit_restore
+    /* Function ID is already in W0 (the first parameter).
+         X1=2 means that we are tracing a tail exit event, but before the
+         logging part of XRay is ready, we pretend that here a normal function
+         exit happens, so we give the handler code 1 */
+    MOV X1, #1
+    /* Call the handler with 2 parameters in W0 and X1 */
+    BLR X2
+FunctionTailExit_restore:
+    /* Pop the parameters of the tail called function */
+    LDP Q6, Q7, [SP], #32
+    LDP Q4, Q5, [SP], #32
+    LDP Q2, Q3, [SP], #32
+    LDP Q0, Q1, [SP], #32
+    /* Pop the registers which may be modified by the handler function */
+    LDP X7, X30, [SP], #16
+    LDP X5, X6, [SP], #16
+    LDP X3, X4, [SP], #16
+    LDP X1, X2, [SP], #16
+    RET
+
+NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/xray/xray_trampoline_arm.S b/lib/xray/xray_trampoline_arm.S
index 5d87c97..71dbee6 100644
--- a/lib/xray/xray_trampoline_arm.S
+++ b/lib/xray/xray_trampoline_arm.S
@@ -1,8 +1,11 @@
+#include "../builtins/assembly.h"
+
     .syntax unified
     .arch armv6t2
     .fpu vfpv2
     .code 32
     .global _ZN6__xray19XRayPatchedFunctionE
+
     @ Word-aligned function entry point
     .p2align 2
     @ Let C/C++ see the symbol
@@ -63,3 +66,37 @@
     @ Restore the floating-point return value of the instrumented function
     VPOP {d0}
     POP {r1-r3,pc}
+
+    @ Word-aligned function entry point
+    .p2align 2
+    @ Let C/C++ see the symbol
+    .global __xray_FunctionTailExit
+    @ It preserves all registers except r0, r12(ip), r14(lr) and r15(pc)
+    @ Assume that "q" part of the floating-point registers is not used
+    @   for passing parameters to C/C++ functions.
+    .type __xray_FunctionTailExit, %function
+    @ In C++ it is void extern "C" __xray_FunctionTailExit(uint32_t FuncId)
+    @   with FuncId passed in r0 register.
+__xray_FunctionTailExit:
+    PUSH {r1-r3,lr}
+    @ Save floating-point parameters of the instrumented function
+    VPUSH {d0-d7}
+    MOVW r1,#:lower16:_ZN6__xray19XRayPatchedFunctionE
+    MOVT r1,#:upper16:_ZN6__xray19XRayPatchedFunctionE
+    LDR r2, [r1]
+    @ Handler address is nullptr if handler is not set
+    CMP r2, #0
+    BEQ FunctionTailExit_restore
+    @ Function ID is already in r0 (the first parameter).
+    @ r1=2 means that we are tracing a tail exit event
+    @ But before the logging part of XRay is ready, we pretend that here a
+    @   normal function exit happens, so we give the handler code 1
+    MOV r1, #1
+    @ Call the handler with 2 parameters in r0 and r1
+    BLX r2
+FunctionTailExit_restore:
+    @ Restore floating-point parameters of the instrumented function
+    VPOP {d0-d7}
+    POP {r1-r3,pc}
+
+NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/xray/xray_trampoline_mips.S b/lib/xray/xray_trampoline_mips.S
new file mode 100644
index 0000000..39a1a3a
--- /dev/null
+++ b/lib/xray/xray_trampoline_mips.S
@@ -0,0 +1,110 @@
+//===-- xray_trampoline_mips.s ----------------------------------*- ASM -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// This implements the MIPS-specific assembler for the trampolines.
+//
+//===----------------------------------------------------------------------===//
+
+  .text
+  .file "xray_trampoline_mips.S"
+  .globl __xray_FunctionEntry
+  .p2align 2
+  .type __xray_FunctionEntry,@function
+__xray_FunctionEntry:
+  .cfi_startproc
+  .set noreorder
+  .cpload $t9
+  .set reorder
+  // Save argument registers before doing any actual work
+  .cfi_def_cfa_offset 36
+  addiu  $sp, $sp, -36
+  sw     $ra, 32($sp)
+  .cfi_offset 31, -4
+  sw     $a3, 28($sp)
+  sw     $a2, 24($sp)
+  sw     $a1, 20($sp)
+  sw     $a0, 16($sp)
+  sdc1	 $f14, 8($sp)
+  sdc1	 $f12, 0($sp)
+
+  la     $t9, _ZN6__xray19XRayPatchedFunctionE
+  lw     $t9, 0($t9)
+
+  beqz   $t9, FunctionEntry_restore
+
+  // a1=0 means that we are tracing an entry event
+  move   $a1, $zero
+  // Function ID is in t0 (the first parameter).
+  move   $a0, $t0
+  jalr   $t9
+
+FunctionEntry_restore:
+  // Restore argument registers
+  ldc1   $f12, 0($sp)
+  ldc1   $f14, 8($sp)
+  lw     $a0, 16($sp)
+  lw     $a1, 20($sp)
+  lw     $a2, 24($sp)
+  lw     $a3, 28($sp)
+  lw     $ra, 32($sp)
+  addiu	 $sp, $sp, 36
+  jr     $ra
+FunctionEntry_end:
+  .size __xray_FunctionEntry, FunctionEntry_end-__xray_FunctionEntry
+  .cfi_endproc
+
+  .text
+  .globl __xray_FunctionExit
+  .p2align 2
+  .type __xray_FunctionExit,@function
+__xray_FunctionExit:
+  .cfi_startproc
+  .set noreorder
+  .cpload $t9
+  .set reorder
+  // Save return registers before doing any actual work.
+  .cfi_def_cfa_offset 36
+  addiu  $sp, $sp, -36
+  sw     $ra, 32($sp)
+  .cfi_offset 31, -4
+  sw     $a1, 28($sp)
+  sw     $a0, 24($sp)
+  sw     $v1, 20($sp)
+  sw     $v0, 16($sp)
+  sdc1   $f2, 8($sp)
+  sdc1   $f0, 0($sp)
+
+  la     $t9, _ZN6__xray19XRayPatchedFunctionE
+  lw     $t9, 0($t9)
+
+  beqz	 $t9, FunctionExit_restore
+
+  // a1=1 means that we are tracing an exit event
+  li     $a1, 1
+  // Function ID is in t0 (the first parameter).
+  move   $a0, $t0
+  jalr   $t9
+
+FunctionExit_restore:
+  // Restore return registers
+  ldc1   $f0, 0($sp)
+  ldc1   $f2, 8($sp)
+  lw     $v0, 16($sp)
+  lw     $v1, 20($sp)
+  lw     $a0, 24($sp)
+  lw     $a1, 28($sp)
+  lw     $ra, 32($sp)
+  addiu  $sp, $sp, 36
+  jr     $ra
+
+FunctionExit_end:
+  .size __xray_FunctionExit, FunctionExit_end-__xray_FunctionExit
+  .cfi_endproc
diff --git a/lib/xray/xray_trampoline_mips64.S b/lib/xray/xray_trampoline_mips64.S
new file mode 100644
index 0000000..9cbc7e1
--- /dev/null
+++ b/lib/xray/xray_trampoline_mips64.S
@@ -0,0 +1,136 @@
+//===-- xray_trampoline_mips64.s --------------------------------*- ASM -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// This implements the MIPS64-specific assembler for the trampolines.
+//
+//===----------------------------------------------------------------------===//
+
+  .text
+  .file "xray_trampoline_mips64.S"
+  .globl __xray_FunctionEntry
+  .p2align 2
+  .type __xray_FunctionEntry,@function
+__xray_FunctionEntry:
+  .cfi_startproc
+  // Save argument registers before doing any actual work.
+  .cfi_def_cfa_offset 144
+  daddiu  $sp, $sp, -144
+  sd      $ra, 136($sp)
+  .cfi_offset 31, -8
+  sd      $gp, 128($sp)
+  sd      $a7, 120($sp)
+  sd      $a6, 112($sp)
+  sd      $a5, 104($sp)
+  sd      $a4, 96($sp)
+  sd      $a3, 88($sp)
+  sd      $a2, 80($sp)
+  sd      $a1, 72($sp)
+  sd      $a0, 64($sp)
+  sdc1    $f19, 56($sp)
+  sdc1    $f18, 48($sp)
+  sdc1    $f17, 40($sp)
+  sdc1    $f16, 32($sp)
+  sdc1    $f15, 24($sp)
+  sdc1    $f14, 16($sp)
+  sdc1    $f13, 8($sp)
+  sdc1    $f12, 0($sp)
+
+  lui     $gp, %hi(%neg(%gp_rel(__xray_FunctionEntry)))
+  daddu   $gp, $gp, $t9
+  daddiu  $gp ,$gp, %lo(%neg(%gp_rel(__xray_FunctionEntry)))
+
+  dla     $t9, _ZN6__xray19XRayPatchedFunctionE
+  ld      $t9, 0($t9)
+
+  beqz    $t9, FunctionEntry_restore
+
+  // a1=0 means that we are tracing an entry event
+  move    $a1, $zero
+  // Function ID is in t0 (the first parameter).
+  move    $a0, $t0
+  jalr    $t9
+
+FunctionEntry_restore:
+  // Restore argument registers
+  ldc1    $f12, 0($sp)
+  ldc1    $f13, 8($sp)
+  ldc1    $f14, 16($sp)
+  ldc1    $f15, 24($sp)
+  ldc1    $f16, 32($sp)
+  ldc1    $f17, 40($sp)
+  ldc1    $f18, 48($sp)
+  ldc1    $f19, 56($sp)
+  ld      $a0, 64($sp)
+  ld      $a1, 72($sp)
+  ld      $a2, 80($sp)
+  ld      $a3, 88($sp)
+  ld      $a4, 96($sp)
+  ld      $a5, 104($sp)
+  ld      $a6, 112($sp)
+  ld      $a7, 120($sp)
+  ld      $gp, 128($sp)
+  ld      $ra, 136($sp)
+  daddiu  $sp, $sp, 144
+  jr      $ra
+FunctionEntry_end:
+  .size __xray_FunctionEntry, FunctionEntry_end-__xray_FunctionEntry
+  .cfi_endproc
+
+  .text
+  .globl __xray_FunctionExit
+  .p2align 2
+  .type __xray_FunctionExit,@function
+__xray_FunctionExit:
+  .cfi_startproc
+  // Save return registers before doing any actual work.
+  .cfi_def_cfa_offset 64
+  daddiu  $sp, $sp, -64
+  sd      $ra, 56($sp)
+  .cfi_offset 31, -8
+  sd      $gp, 48($sp)
+  sd      $a0, 40($sp)
+  sd      $v1, 32($sp)
+  sd      $v0, 24($sp)
+  sdc1    $f2, 16($sp)
+  sdc1    $f1, 8($sp)
+  sdc1    $f0, 0($sp)
+
+  lui     $gp, %hi(%neg(%gp_rel(__xray_FunctionExit)))
+  daddu   $gp, $gp, $t9
+  daddiu  $gp ,$gp, %lo(%neg(%gp_rel(__xray_FunctionExit)))
+
+  dla     $t9, _ZN6__xray19XRayPatchedFunctionE
+  ld      $t9, 0($t9)
+
+  beqz    $t9, FunctionExit_restore
+
+  // a1=1 means that we are tracing an exit event
+  li      $a1, 1
+  // Function ID is in t0 (the first parameter).
+  move    $a0, $t0
+  jalr    $t9
+
+FunctionExit_restore:
+  // Restore return registers
+  ldc1    $f0, 0($sp)
+  ldc1    $f1, 8($sp)
+  ldc1    $f2, 16($sp)
+  ld      $v0, 24($sp)
+  ld      $v1, 32($sp)
+  ld      $a0, 40($sp)
+  ld      $gp, 48($sp)
+  ld      $ra, 56($sp)
+  daddiu  $sp, $sp, 64
+  jr      $ra
+
+FunctionExit_end:
+  .size __xray_FunctionExit, FunctionExit_end-__xray_FunctionExit
+  .cfi_endproc
diff --git a/lib/xray/xray_trampoline_powerpc64.cc b/lib/xray/xray_trampoline_powerpc64.cc
new file mode 100644
index 0000000..878c469
--- /dev/null
+++ b/lib/xray/xray_trampoline_powerpc64.cc
@@ -0,0 +1,15 @@
+#include <atomic>
+#include <xray/xray_interface.h>
+
+namespace __xray {
+
+extern std::atomic<void (*)(int32_t, XRayEntryType)> XRayPatchedFunction;
+
+// Implement this in C++ instead of assembly, to avoid dealing with ToC by hand.
+void CallXRayPatchedFunction(int32_t FuncId, XRayEntryType Type) {
+  auto fptr = __xray::XRayPatchedFunction.load();
+  if (fptr != nullptr)
+    (*fptr)(FuncId, Type);
+}
+
+} // namespace __xray
diff --git a/lib/xray/xray_trampoline_powerpc64_asm.S b/lib/xray/xray_trampoline_powerpc64_asm.S
new file mode 100644
index 0000000..250e2e5
--- /dev/null
+++ b/lib/xray/xray_trampoline_powerpc64_asm.S
@@ -0,0 +1,235 @@
+	.text
+	.abiversion 2
+	.globl	__xray_FunctionEntry
+	.p2align	4
+__xray_FunctionEntry:
+	std 0, 16(1)
+	stdu 1, -408(1)
+# Spill r3-r10, f1-f13, and vsr34-vsr45, which are parameter registers.
+# If this appears to be slow, the caller needs to pass in number of generic,
+# floating point, and vector parameters, so that we only spill those live ones.
+	std 3, 32(1)
+	ld 3, 400(1) # FuncId
+	std 4, 40(1)
+	std 5, 48(1)
+	std 6, 56(1)
+	std 7, 64(1)
+	std 8, 72(1)
+	std 9, 80(1)
+	std 10, 88(1)
+	addi 4, 1, 96
+	stxsdx 1, 0, 4
+	addi 4, 1, 104
+	stxsdx 2, 0, 4
+	addi 4, 1, 112
+	stxsdx 3, 0, 4
+	addi 4, 1, 120
+	stxsdx 4, 0, 4
+	addi 4, 1, 128
+	stxsdx 5, 0, 4
+	addi 4, 1, 136
+	stxsdx 6, 0, 4
+	addi 4, 1, 144
+	stxsdx 7, 0, 4
+	addi 4, 1, 152
+	stxsdx 8, 0, 4
+	addi 4, 1, 160
+	stxsdx 9, 0, 4
+	addi 4, 1, 168
+	stxsdx 10, 0, 4
+	addi 4, 1, 176
+	stxsdx 11, 0, 4
+	addi 4, 1, 184
+	stxsdx 12, 0, 4
+	addi 4, 1, 192
+	stxsdx 13, 0, 4
+	addi 4, 1, 200
+	stxvd2x 34, 0, 4
+	addi 4, 1, 216
+	stxvd2x 35, 0, 4
+	addi 4, 1, 232
+	stxvd2x 36, 0, 4
+	addi 4, 1, 248
+	stxvd2x 37, 0, 4
+	addi 4, 1, 264
+	stxvd2x 38, 0, 4
+	addi 4, 1, 280
+	stxvd2x 39, 0, 4
+	addi 4, 1, 296
+	stxvd2x 40, 0, 4
+	addi 4, 1, 312
+	stxvd2x 41, 0, 4
+	addi 4, 1, 328
+	stxvd2x 42, 0, 4
+	addi 4, 1, 344
+	stxvd2x 43, 0, 4
+	addi 4, 1, 360
+	stxvd2x 44, 0, 4
+	addi 4, 1, 376
+	stxvd2x 45, 0, 4
+	std 2, 392(1)
+	mflr 0
+	std 0, 400(1)
+
+	li 4, 0
+	bl _ZN6__xray23CallXRayPatchedFunctionEi13XRayEntryType
+	nop
+
+	addi 4, 1, 96
+	lxsdx 1, 0, 4
+	addi 4, 1, 104
+	lxsdx 2, 0, 4
+	addi 4, 1, 112
+	lxsdx 3, 0, 4
+	addi 4, 1, 120
+	lxsdx 4, 0, 4
+	addi 4, 1, 128
+	lxsdx 5, 0, 4
+	addi 4, 1, 136
+	lxsdx 6, 0, 4
+	addi 4, 1, 144
+	lxsdx 7, 0, 4
+	addi 4, 1, 152
+	lxsdx 8, 0, 4
+	addi 4, 1, 160
+	lxsdx 9, 0, 4
+	addi 4, 1, 168
+	lxsdx 10, 0, 4
+	addi 4, 1, 176
+	lxsdx 11, 0, 4
+	addi 4, 1, 184
+	lxsdx 12, 0, 4
+	addi 4, 1, 192
+	lxsdx 13, 0, 4
+	addi 4, 1, 200
+	lxvd2x 34, 0, 4
+	addi 4, 1, 216
+	lxvd2x 35, 0, 4
+	addi 4, 1, 232
+	lxvd2x 36, 0, 4
+	addi 4, 1, 248
+	lxvd2x 37, 0, 4
+	addi 4, 1, 264
+	lxvd2x 38, 0, 4
+	addi 4, 1, 280
+	lxvd2x 39, 0, 4
+	addi 4, 1, 296
+	lxvd2x 40, 0, 4
+	addi 4, 1, 312
+	lxvd2x 41, 0, 4
+	addi 4, 1, 328
+	lxvd2x 42, 0, 4
+	addi 4, 1, 344
+	lxvd2x 43, 0, 4
+	addi 4, 1, 360
+	lxvd2x 44, 0, 4
+	addi 4, 1, 376
+	lxvd2x 45, 0, 4
+	ld 0, 400(1)
+	mtlr 0
+	ld 2, 392(1)
+	ld 3, 32(1)
+	ld 4, 40(1)
+	ld 5, 48(1)
+	ld 6, 56(1)
+	ld 7, 64(1)
+	ld 8, 72(1)
+	ld 9, 80(1)
+	ld 10, 88(1)
+
+	addi 1, 1, 408
+	ld 0, 16(1)
+	blr
+
+	.globl	__xray_FunctionExit
+	.p2align	4
+__xray_FunctionExit:
+	std 0, 16(1)
+	stdu 1, -256(1)
+# Spill r3-r4, f1-f8, and vsr34-vsr41, which are return registers.
+# If this appears to be slow, the caller needs to pass in number of generic,
+# floating point, and vector parameters, so that we only spill those live ones.
+	std 3, 32(1)
+	ld 3, 248(1) # FuncId
+	std 4, 40(1)
+	addi 4, 1, 48
+	stxsdx 1, 0, 4
+	addi 4, 1, 56
+	stxsdx 2, 0, 4
+	addi 4, 1, 64
+	stxsdx 3, 0, 4
+	addi 4, 1, 72
+	stxsdx 4, 0, 4
+	addi 4, 1, 80
+	stxsdx 5, 0, 4
+	addi 4, 1, 88
+	stxsdx 6, 0, 4
+	addi 4, 1, 96
+	stxsdx 7, 0, 4
+	addi 4, 1, 104
+	stxsdx 8, 0, 4
+	addi 4, 1, 112
+	stxvd2x 34, 0, 4
+	addi 4, 1, 128
+	stxvd2x 35, 0, 4
+	addi 4, 1, 144
+	stxvd2x 36, 0, 4
+	addi 4, 1, 160
+	stxvd2x 37, 0, 4
+	addi 4, 1, 176
+	stxvd2x 38, 0, 4
+	addi 4, 1, 192
+	stxvd2x 39, 0, 4
+	addi 4, 1, 208
+	stxvd2x 40, 0, 4
+	addi 4, 1, 224
+	stxvd2x 41, 0, 4
+	std 2, 240(1)
+	mflr 0
+	std 0, 248(1)
+
+	li 4, 1
+	bl _ZN6__xray23CallXRayPatchedFunctionEi13XRayEntryType
+	nop
+
+	addi 4, 1, 48
+	lxsdx 1, 0, 4
+	addi 4, 1, 56
+	lxsdx 2, 0, 4
+	addi 4, 1, 64
+	lxsdx 3, 0, 4
+	addi 4, 1, 72
+	lxsdx 4, 0, 4
+	addi 4, 1, 80
+	lxsdx 5, 0, 4
+	addi 4, 1, 88
+	lxsdx 6, 0, 4
+	addi 4, 1, 96
+	lxsdx 7, 0, 4
+	addi 4, 1, 104
+	lxsdx 8, 0, 4
+	addi 4, 1, 112
+	lxvd2x 34, 0, 4
+	addi 4, 1, 128
+	lxvd2x 35, 0, 4
+	addi 4, 1, 144
+	lxvd2x 36, 0, 4
+	addi 4, 1, 160
+	lxvd2x 37, 0, 4
+	addi 4, 1, 176
+	lxvd2x 38, 0, 4
+	addi 4, 1, 192
+	lxvd2x 39, 0, 4
+	addi 4, 1, 208
+	lxvd2x 40, 0, 4
+	addi 4, 1, 224
+	lxvd2x 41, 0, 4
+	ld 0, 248(1)
+	mtlr 0
+	ld 2, 240(1)
+	ld 3, 32(1)
+	ld 4, 40(1)
+
+	addi 1, 1, 256
+	ld 0, 16(1)
+	blr
diff --git a/lib/xray/xray_trampoline_x86_64.S b/lib/xray/xray_trampoline_x86_64.S
index d90c30c..b59eedc 100644
--- a/lib/xray/xray_trampoline_x86_64.S
+++ b/lib/xray/xray_trampoline_x86_64.S
@@ -13,54 +13,64 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "../builtins/assembly.h"
+
 .macro SAVE_REGISTERS
-	subq $200, %rsp
-	movupd	%xmm0, 184(%rsp)
-	movupd	%xmm1, 168(%rsp)
-	movupd	%xmm2, 152(%rsp)
-	movupd	%xmm3, 136(%rsp)
-	movupd	%xmm4, 120(%rsp)
-	movupd	%xmm5, 104(%rsp)
-	movupd	%xmm6, 88(%rsp)
-	movupd	%xmm7, 72(%rsp)
-	movq	%rdi, 64(%rsp)
-	movq	%rax, 56(%rsp)
-	movq	%rdx, 48(%rsp)
-	movq	%rsi, 40(%rsp)
-	movq	%rcx, 32(%rsp)
-	movq	%r8, 24(%rsp)
-	movq	%r9, 16(%rsp)
+	subq $192, %rsp
+	.cfi_def_cfa_offset 200
+	// At this point, the stack pointer should be aligned to an 8-byte boundary,
+	// because any call instructions that come after this will add another 8
+	// bytes and therefore align it to 16-bytes.
+	movq %rbp, 184(%rsp)
+	movupd	%xmm0, 168(%rsp)
+	movupd	%xmm1, 152(%rsp)
+	movupd	%xmm2, 136(%rsp)
+	movupd	%xmm3, 120(%rsp)
+	movupd	%xmm4, 104(%rsp)
+	movupd	%xmm5, 88(%rsp)
+	movupd	%xmm6, 72(%rsp)
+	movupd	%xmm7, 56(%rsp)
+	movq	%rdi, 48(%rsp)
+	movq	%rax, 40(%rsp)
+	movq	%rdx, 32(%rsp)
+	movq	%rsi, 24(%rsp)
+	movq	%rcx, 16(%rsp)
+	movq	%r8, 8(%rsp)
+	movq	%r9, 0(%rsp)
 .endm
 
 .macro RESTORE_REGISTERS
-	movupd	184(%rsp), %xmm0
-	movupd	168(%rsp), %xmm1
-	movupd	152(%rsp), %xmm2
-	movupd	136(%rsp), %xmm3
-	movupd	120(%rsp), %xmm4
-	movupd	104(%rsp), %xmm5
-	movupd	88(%rsp) , %xmm6
-	movupd	72(%rsp) , %xmm7
-	movq	64(%rsp), %rdi
-	movq	56(%rsp), %rax
-	movq	48(%rsp), %rdx
-	movq	40(%rsp), %rsi
-	movq	32(%rsp), %rcx
-	movq	24(%rsp), %r8
-	movq	16(%rsp), %r9
-	addq	$200, %rsp
+	movq  184(%rsp), %rbp
+	movupd	168(%rsp), %xmm0
+	movupd	152(%rsp), %xmm1
+	movupd	136(%rsp), %xmm2
+	movupd	120(%rsp), %xmm3
+	movupd	104(%rsp), %xmm4
+	movupd	88(%rsp), %xmm5
+	movupd	72(%rsp) , %xmm6
+	movupd	56(%rsp) , %xmm7
+	movq	48(%rsp), %rdi
+	movq	40(%rsp), %rax
+	movq	32(%rsp), %rdx
+	movq	24(%rsp), %rsi
+	movq	16(%rsp), %rcx
+	movq	8(%rsp), %r8
+	movq	0(%rsp), %r9
+	addq	$192, %rsp
+	.cfi_def_cfa_offset 8
 .endm
 
 	.text
 	.file "xray_trampoline_x86.S"
+
+//===----------------------------------------------------------------------===//
+
 	.globl __xray_FunctionEntry
 	.align 16, 0x90
 	.type __xray_FunctionEntry,@function
 
 __xray_FunctionEntry:
 	.cfi_startproc
-	pushq %rbp
-	.cfi_def_cfa_offset 16
 	SAVE_REGISTERS
 
 	// This load has to be atomic, it's concurrent with __xray_patch().
@@ -75,12 +85,13 @@
 	callq	*%rax
 .Ltmp0:
 	RESTORE_REGISTERS
-	popq	%rbp
 	retq
 .Ltmp1:
 	.size __xray_FunctionEntry, .Ltmp1-__xray_FunctionEntry
 	.cfi_endproc
 
+//===----------------------------------------------------------------------===//
+
 	.globl __xray_FunctionExit
 	.align 16, 0x90
 	.type __xray_FunctionExit,@function
@@ -89,14 +100,13 @@
 	// Save the important registers first. Since we're assuming that this
 	// function is only jumped into, we only preserve the registers for
 	// returning.
-	pushq	%rbp
-	.cfi_def_cfa_offset 16
 	subq	$56, %rsp
-	.cfi_def_cfa_offset 32
-	movupd	%xmm0, 40(%rsp)
-	movupd	%xmm1, 24(%rsp)
-	movq	%rax, 16(%rsp)
-	movq	%rdx, 8(%rsp)
+	.cfi_def_cfa_offset 64
+	movq  %rbp, 48(%rsp)
+	movupd	%xmm0, 32(%rsp)
+	movupd	%xmm1, 16(%rsp)
+	movq	%rax, 8(%rsp)
+	movq	%rdx, 0(%rsp)
 	movq	_ZN6__xray19XRayPatchedFunctionE(%rip), %rax
 	testq %rax,%rax
 	je	.Ltmp2
@@ -106,17 +116,20 @@
 	callq	*%rax
 .Ltmp2:
 	// Restore the important registers.
-	movupd	40(%rsp), %xmm0
-	movupd	24(%rsp), %xmm1
-	movq	16(%rsp), %rax
-	movq	8(%rsp), %rdx
+	movq  48(%rsp), %rbp
+	movupd	32(%rsp), %xmm0
+	movupd	16(%rsp), %xmm1
+	movq	8(%rsp), %rax
+	movq	0(%rsp), %rdx
 	addq	$56, %rsp
-	popq	%rbp
+	.cfi_def_cfa_offset 8
 	retq
 .Ltmp3:
 	.size __xray_FunctionExit, .Ltmp3-__xray_FunctionExit
 	.cfi_endproc
 
+//===----------------------------------------------------------------------===//
+
 	.global __xray_FunctionTailExit
 	.align 16, 0x90
 	.type __xray_FunctionTailExit,@function
@@ -126,8 +139,6 @@
 	// this is an exit. In the future, we will introduce a new entry type that
 	// differentiates between a normal exit and a tail exit, but we'd have to do
 	// this and increment the version number for the header.
-	pushq %rbp
-	.cfi_def_cfa_offset 16
 	SAVE_REGISTERS
 
 	movq	_ZN6__xray19XRayPatchedFunctionE(%rip), %rax
@@ -140,8 +151,82 @@
 
 .Ltmp4:
 	RESTORE_REGISTERS
-	popq	%rbp
 	retq
 .Ltmp5:
 	.size __xray_FunctionTailExit, .Ltmp5-__xray_FunctionTailExit
 	.cfi_endproc
+
+//===----------------------------------------------------------------------===//
+
+	.globl __xray_ArgLoggerEntry
+	.align 16, 0x90
+	.type __xray_ArgLoggerEntry,@function
+__xray_ArgLoggerEntry:
+	.cfi_startproc
+	SAVE_REGISTERS
+
+	// Again, these function pointer loads must be atomic; MOV is fine.
+	movq	_ZN6__xray13XRayArgLoggerE(%rip), %rax
+	testq	%rax, %rax
+	jne	.Larg1entryLog
+
+	// If [arg1 logging handler] not set, defer to no-arg logging.
+	movq	_ZN6__xray19XRayPatchedFunctionE(%rip), %rax
+	testq	%rax, %rax
+	je	.Larg1entryFail
+
+.Larg1entryLog:
+
+  // First argument will become the third
+	movq	%rdi, %rdx
+
+  // XRayEntryType::ENTRY into the second
+	xorq	%rsi, %rsi
+
+	// 32-bit function ID becomes the first
+	movl	%r10d, %edi
+	callq	*%rax
+
+.Larg1entryFail:
+	RESTORE_REGISTERS
+	retq
+
+.Larg1entryEnd:
+	.size __xray_ArgLoggerEntry, .Larg1entryEnd-__xray_ArgLoggerEntry
+	.cfi_endproc
+
+//===----------------------------------------------------------------------===//
+
+	.global __xray_CustomEvent
+	.align 16, 0x90
+	.type __xray_CustomEvent,@function
+__xray_CustomEvent:
+  .cfi_startproc
+	subq $16, %rsp
+	.cfi_def_cfa_offset 24
+	movq %rbp, 8(%rsp)
+	movq %rax, 0(%rsp)
+
+	// We take two arguments to this trampoline, which should be in rdi	and rsi
+	// already. We also make sure that we stash %rax because we use that register
+	// to call the logging handler.
+	movq _ZN6__xray22XRayPatchedCustomEventE(%rip), %rax
+	testq %rax,%rax
+	je .LcustomEventCleanup
+
+	// At this point we know that rcx and rdx already has the data, so we just
+	// call the logging handler.
+  callq *%rax
+
+.LcustomEventCleanup:
+	movq 0(%rsp), %rax
+	movq 8(%rsp), %rbp
+	addq $16, %rsp
+	.cfi_def_cfa_offset 8
+	retq
+
+.Ltmp8:
+	.size __xray_CustomEvent, .Ltmp8-__xray_CustomEvent
+	.cfi_endproc
+
+NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/xray/xray_tsc.h b/lib/xray/xray_tsc.h
new file mode 100644
index 0000000..4507564
--- /dev/null
+++ b/lib/xray/xray_tsc.h
@@ -0,0 +1,68 @@
+//===-- xray_tsc.h ----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+//===----------------------------------------------------------------------===//
+#ifndef XRAY_EMULATE_TSC_H
+#define XRAY_EMULATE_TSC_H
+
+namespace __xray {
+static constexpr uint64_t NanosecondsPerSecond = 1000ULL * 1000 * 1000;
+}
+
+#if defined(__x86_64__)
+#include "xray_x86_64.inc"
+#elif defined(__powerpc64__)
+#include "xray_powerpc64.inc"
+#elif defined(__arm__) || defined(__aarch64__) || defined(__mips__)
+// Emulated TSC.
+// There is no instruction like RDTSCP in user mode on ARM. ARM's CP15 does
+//   not have a constant frequency like TSC on x86(_64), it may go faster
+//   or slower depending on CPU turbo or power saving mode. Furthermore,
+//   to read from CP15 on ARM a kernel modification or a driver is needed.
+//   We can not require this from users of compiler-rt.
+// So on ARM we use clock_gettime() which gives the result in nanoseconds.
+//   To get the measurements per second, we scale this by the number of
+//   nanoseconds per second, pretending that the TSC frequency is 1GHz and
+//   one TSC tick is 1 nanosecond.
+#include "sanitizer_common/sanitizer_common.h"
+#include "sanitizer_common/sanitizer_internal_defs.h"
+#include "xray_defs.h"
+#include <cerrno>
+#include <cstdint>
+#include <time.h>
+
+namespace __xray {
+
+inline bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT { return true; }
+
+ALWAYS_INLINE uint64_t readTSC(uint8_t &CPU) XRAY_NEVER_INSTRUMENT {
+  timespec TS;
+  int result = clock_gettime(CLOCK_REALTIME, &TS);
+  if (result != 0) {
+    Report("clock_gettime(2) returned %d, errno=%d.", result, int(errno));
+    TS.tv_sec = 0;
+    TS.tv_nsec = 0;
+  }
+  CPU = 0;
+  return TS.tv_sec * NanosecondsPerSecond + TS.tv_nsec;
+}
+
+inline uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+  return NanosecondsPerSecond;
+}
+
+} // namespace __xray
+
+#else
+#error Target architecture is not supported.
+#endif // CPU architecture
+
+#endif // XRAY_EMULATE_TSC_H
diff --git a/lib/xray/xray_utils.cc b/lib/xray/xray_utils.cc
new file mode 100644
index 0000000..b9a38d1
--- /dev/null
+++ b/lib/xray/xray_utils.cc
@@ -0,0 +1,125 @@
+//===-- xray_utils.cc -------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+//===----------------------------------------------------------------------===//
+#include "xray_utils.h"
+
+#include "sanitizer_common/sanitizer_common.h"
+#include "xray_defs.h"
+#include "xray_flags.h"
+#include <stdlib.h>
+#include <cstdio>
+#include <errno.h>
+#include <fcntl.h>
+#include <iterator>
+#include <sys/types.h>
+#include <tuple>
+#include <unistd.h>
+#include <utility>
+
+namespace __xray {
+
+void printToStdErr(const char *Buffer) XRAY_NEVER_INSTRUMENT {
+  fprintf(stderr, "%s", Buffer);
+}
+
+void retryingWriteAll(int Fd, char *Begin, char *End) XRAY_NEVER_INSTRUMENT {
+  if (Begin == End)
+    return;
+  auto TotalBytes = std::distance(Begin, End);
+  while (auto Written = write(Fd, Begin, TotalBytes)) {
+    if (Written < 0) {
+      if (errno == EINTR)
+        continue; // Try again.
+      Report("Failed to write; errno = %d\n", errno);
+      return;
+    }
+    TotalBytes -= Written;
+    if (TotalBytes == 0)
+      break;
+    Begin += Written;
+  }
+}
+
+std::pair<ssize_t, bool> retryingReadSome(int Fd, char *Begin,
+                                          char *End) XRAY_NEVER_INSTRUMENT {
+  auto BytesToRead = std::distance(Begin, End);
+  ssize_t BytesRead;
+  ssize_t TotalBytesRead = 0;
+  while (BytesToRead && (BytesRead = read(Fd, Begin, BytesToRead))) {
+    if (BytesRead == -1) {
+      if (errno == EINTR)
+        continue;
+      Report("Read error; errno = %d\n", errno);
+      return std::make_pair(TotalBytesRead, false);
+    }
+
+    TotalBytesRead += BytesRead;
+    BytesToRead -= BytesRead;
+    Begin += BytesRead;
+  }
+  return std::make_pair(TotalBytesRead, true);
+}
+
+bool readValueFromFile(const char *Filename,
+                       long long *Value) XRAY_NEVER_INSTRUMENT {
+  int Fd = open(Filename, O_RDONLY | O_CLOEXEC);
+  if (Fd == -1)
+    return false;
+  static constexpr size_t BufSize = 256;
+  char Line[BufSize] = {};
+  ssize_t BytesRead;
+  bool Success;
+  std::tie(BytesRead, Success) = retryingReadSome(Fd, Line, Line + BufSize);
+  if (!Success)
+    return false;
+  close(Fd);
+  char *End = nullptr;
+  long long Tmp = internal_simple_strtoll(Line, &End, 10);
+  bool Result = false;
+  if (Line[0] != '\0' && (*End == '\n' || *End == '\0')) {
+    *Value = Tmp;
+    Result = true;
+  }
+  return Result;
+}
+
+int getLogFD() XRAY_NEVER_INSTRUMENT {
+  // Open a temporary file once for the log.
+  static char TmpFilename[256] = {};
+  static char TmpWildcardPattern[] = "XXXXXX";
+  auto Argv = GetArgv();
+  const char *Progname = Argv[0] == nullptr ? "(unknown)" : Argv[0];
+  const char *LastSlash = internal_strrchr(Progname, '/');
+
+  if (LastSlash != nullptr)
+    Progname = LastSlash + 1;
+
+  const int HalfLength = sizeof(TmpFilename) / 2 - sizeof(TmpWildcardPattern);
+  int NeededLength = internal_snprintf(
+      TmpFilename, sizeof(TmpFilename), "%.*s%.*s.%s", HalfLength,
+      flags()->xray_logfile_base, HalfLength, Progname, TmpWildcardPattern);
+  if (NeededLength > int(sizeof(TmpFilename))) {
+    Report("XRay log file name too long (%d): %s\n", NeededLength, TmpFilename);
+    return -1;
+  }
+  int Fd = mkstemp(TmpFilename);
+  if (Fd == -1) {
+    Report("XRay: Failed opening temporary file '%s'; not logging events.\n",
+           TmpFilename);
+    return -1;
+  }
+  Report("XRay: Log file in '%s'\n", TmpFilename);
+
+  return Fd;
+}
+
+} // namespace __xray
diff --git a/lib/xray/xray_utils.h b/lib/xray/xray_utils.h
new file mode 100644
index 0000000..1ecc74a
--- /dev/null
+++ b/lib/xray/xray_utils.h
@@ -0,0 +1,41 @@
+//===-- xray_utils.h --------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of XRay, a dynamic runtime instrumentation system.
+//
+// Some shared utilities for the XRay runtime implementation.
+//
+//===----------------------------------------------------------------------===//
+#ifndef XRAY_UTILS_H
+#define XRAY_UTILS_H
+
+#include <sys/types.h>
+#include <utility>
+
+namespace __xray {
+
+// Default implementation of the reporting interface for sanitizer errors.
+void printToStdErr(const char *Buffer);
+
+// EINTR-safe write routine, provided a file descriptor and a character range.
+void retryingWriteAll(int Fd, char *Begin, char *End);
+
+// Reads a long long value from a provided file.
+bool readValueFromFile(const char *Filename, long long *Value);
+
+// EINTR-safe read routine, providing a file descriptor and a character range.
+std::pair<ssize_t, bool> retryingReadSome(int Fd, char *Begin, char *End);
+
+// EINTR-safe open routine, uses flag-provided values for initialising a log
+// file.
+int getLogFD();
+
+} // namespace __xray
+
+#endif // XRAY_UTILS_H
diff --git a/lib/xray/xray_x86_64.cc b/lib/xray/xray_x86_64.cc
index 3ee9189..e34806f 100644
--- a/lib/xray/xray_x86_64.cc
+++ b/lib/xray/xray_x86_64.cc
@@ -1,6 +1,8 @@
+#include "cpuid.h"
 #include "sanitizer_common/sanitizer_common.h"
 #include "xray_defs.h"
 #include "xray_interface_internal.h"
+
 #include <atomic>
 #include <cstdint>
 #include <errno.h>
@@ -42,9 +44,9 @@
   ssize_t BytesRead;
   bool Success;
   std::tie(BytesRead, Success) = retryingReadSome(Fd, Line, Line + BufSize);
+  close(Fd);
   if (!Success)
     return false;
-  close(Fd);
   char *End = nullptr;
   long long Tmp = internal_simple_strtoll(Line, &End, 10);
   bool Result = false;
@@ -55,32 +57,35 @@
   return Result;
 }
 
-uint64_t cycleFrequency() XRAY_NEVER_INSTRUMENT {
-  long long CPUFrequency = -1;
+uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
+  long long TSCFrequency = -1;
   if (readValueFromFile("/sys/devices/system/cpu/cpu0/tsc_freq_khz",
-                        &CPUFrequency)) {
-    CPUFrequency *= 1000;
+                        &TSCFrequency)) {
+    TSCFrequency *= 1000;
   } else if (readValueFromFile(
-      "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq",
-      &CPUFrequency)) {
-    CPUFrequency *= 1000;
+                 "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq",
+                 &TSCFrequency)) {
+    TSCFrequency *= 1000;
   } else {
     Report("Unable to determine CPU frequency for TSC accounting.\n");
   }
-  return CPUFrequency == -1 ? 0 : static_cast<uint64_t>(CPUFrequency);
+  return TSCFrequency == -1 ? 0 : static_cast<uint64_t>(TSCFrequency);
 }
 
 static constexpr uint8_t CallOpCode = 0xe8;
 static constexpr uint16_t MovR10Seq = 0xba41;
 static constexpr uint16_t Jmp9Seq = 0x09eb;
+static constexpr uint16_t Jmp20Seq = 0x14eb;
 static constexpr uint8_t JmpOpCode = 0xe9;
 static constexpr uint8_t RetOpCode = 0xc3;
+static constexpr uint16_t NopwSeq = 0x9066;
 
 static constexpr int64_t MinOffset{std::numeric_limits<int32_t>::min()};
 static constexpr int64_t MaxOffset{std::numeric_limits<int32_t>::max()};
 
 bool patchFunctionEntry(const bool Enable, const uint32_t FuncId,
-                        const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+                        const XRaySledEntry &Sled,
+                        void (*Trampoline)()) XRAY_NEVER_INSTRUMENT {
   // Here we do the dance of replacing the following sled:
   //
   // xray_sled_n:
@@ -101,13 +106,12 @@
   // 4. Do an atomic write over the jmp instruction for the "mov r10d"
   // opcode and first operand.
   //
-  // Prerequisite is to compute the relative offset to the
-  // __xray_FunctionEntry function's address.
-  int64_t TrampolineOffset = reinterpret_cast<int64_t>(__xray_FunctionEntry) -
+  // Prerequisite is to compute the relative offset to the trampoline's address.
+  int64_t TrampolineOffset = reinterpret_cast<int64_t>(Trampoline) -
                              (static_cast<int64_t>(Sled.Address) + 11);
   if (TrampolineOffset < MinOffset || TrampolineOffset > MaxOffset) {
     Report("XRay Entry trampoline (%p) too far from sled (%p)\n",
-           __xray_FunctionEntry, reinterpret_cast<void *>(Sled.Address));
+           Trampoline, reinterpret_cast<void *>(Sled.Address));
     return false;
   }
   if (Enable) {
@@ -199,4 +203,60 @@
   return true;
 }
 
+bool patchCustomEvent(const bool Enable, const uint32_t FuncId,
+                      const XRaySledEntry &Sled) XRAY_NEVER_INSTRUMENT {
+  // Here we do the dance of replacing the following sled:
+  //
+  // xray_sled_n:
+  //   jmp +19          // 2 bytes
+  //   ...
+  //
+  // With the following:
+  //
+  //   nopw             // 2 bytes*
+  //   ...
+  //
+  // We need to do this in the following order:
+  //
+  // 1. Overwrite the 5-byte nop with the call (relative), where (relative) is
+  //    the relative offset to the __xray_CustomEvent trampoline.
+  // 2. Do a two-byte atomic write over the 'jmp +24' to turn it into a 'nopw'.
+  //    This allows us to "enable" this code once the changes have committed.
+  //
+  // The "unpatch" should just turn the 'nopw' back to a 'jmp +24'.
+  //
+  if (Enable) {
+    std::atomic_store_explicit(
+        reinterpret_cast<std::atomic<uint16_t> *>(Sled.Address), NopwSeq,
+        std::memory_order_release);
+  } else {
+    std::atomic_store_explicit(
+        reinterpret_cast<std::atomic<uint16_t> *>(Sled.Address), Jmp20Seq,
+        std::memory_order_release);
+  }
+  return false;
+}
+
+// We determine whether the CPU we're running on has the correct features we
+// need. In x86_64 this will be rdtscp support.
+bool probeRequiredCPUFeatures() XRAY_NEVER_INSTRUMENT {
+  unsigned int EAX, EBX, ECX, EDX;
+
+  // We check whether rdtscp support is enabled. According to the x86_64 manual,
+  // level should be set at 0x80000001, and we should have a look at bit 27 in
+  // EDX. That's 0x8000000 (or 1u << 26).
+  __get_cpuid(0x80000001, &EAX, &EBX, &ECX, &EDX);
+  if (!(EDX & (1u << 26))) {
+    Report("Missing rdtscp support.\n");
+    return false;
+  }
+  // Also check whether we can determine the CPU frequency, since if we cannot,
+  // we should use the emulated TSC instead.
+  if (!getTSCFrequency()) {
+    Report("Unable to determine CPU frequency.\n");
+    return false;
+  }
+  return true;
+}
+
 } // namespace __xray
diff --git a/lib/xray/xray_x86_64.h b/lib/xray/xray_x86_64.inc
similarity index 82%
rename from lib/xray/xray_x86_64.h
rename to lib/xray/xray_x86_64.inc
index 52d2dea..4ad3f98 100644
--- a/lib/xray/xray_x86_64.h
+++ b/lib/xray/xray_x86_64.inc
@@ -1,4 +1,4 @@
-//===-- xray_x86_64.h -------------------------------------------*- C++ -*-===//
+//===-- xray_x86_64.inc -----------------------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -10,8 +10,6 @@
 // This file is a part of XRay, a dynamic runtime instrumentation system.
 //
 //===----------------------------------------------------------------------===//
-#ifndef XRAY_X86_64_H
-#define XRAY_X86_64_H
 
 #include <cstdint>
 #include <x86intrin.h>
@@ -27,6 +25,9 @@
   CPU = LongCPU;
   return TSC;
 }
-}
 
-#endif // XRAY_X86_64_H
+uint64_t getTSCFrequency();
+
+bool probeRequiredCPUFeatures();
+
+} // namespace __xray
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index addc579..9b4759d 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -35,54 +35,41 @@
   endif()
 endif()
 
+function(compiler_rt_test_runtime runtime)
+  string(TOUPPER ${runtime} runtime_uppercase)
+  if(COMPILER_RT_HAS_${runtime_uppercase})
+    add_subdirectory(${runtime})
+    foreach(directory ${ARGN})
+      add_subdirectory(${directory})
+    endforeach()
+  endif()
+endfunction()
+
 # Run sanitizer tests only if we're sure that clang would produce
 # working binaries.
 if(COMPILER_RT_CAN_EXECUTE_TESTS)
   if(COMPILER_RT_BUILD_BUILTINS)
     add_subdirectory(builtins)
   endif()
-  if(COMPILER_RT_HAS_ASAN)
-    add_subdirectory(asan)
+  if(COMPILER_RT_BUILD_SANITIZERS)
+    compiler_rt_test_runtime(interception)
+
+    compiler_rt_test_runtime(lsan)
+    # CFI tests require diagnostic mode, which is implemented in UBSan.
+    compiler_rt_test_runtime(ubsan cfi)
+    compiler_rt_test_runtime(sanitizer_common)
+
+    foreach(sanitizer ${COMPILER_RT_SANITIZERS_TO_BUILD})
+      # cfi testing is gated on ubsan
+      if(NOT ${sanitizer} STREQUAL cfi)
+        compiler_rt_test_runtime(${sanitizer})
+      endif()
+    endforeach()
+
+    compiler_rt_test_runtime(profile)
   endif()
-  if(COMPILER_RT_HAS_DFSAN)
-    add_subdirectory(dfsan)
-  endif()
-  if (COMPILER_RT_HAS_INTERCEPTION)
-    add_subdirectory(interception)
-  endif()
-  if(COMPILER_RT_HAS_LSAN)
-    add_subdirectory(lsan)
-  endif()
-  if(COMPILER_RT_HAS_MSAN)
-    add_subdirectory(msan)
-  endif()
-  if(COMPILER_RT_HAS_PROFILE)
-    add_subdirectory(profile)
-  endif()
-  if(COMPILER_RT_HAS_SANITIZER_COMMON)
-    add_subdirectory(sanitizer_common)
-  endif()
-  if(COMPILER_RT_HAS_TSAN)
-    add_subdirectory(tsan)
-  endif()
-  if(COMPILER_RT_HAS_UBSAN)
-    add_subdirectory(ubsan)
-  endif()
-  # CFI tests require diagnostic mode, which is implemented in UBSan.
-  if(COMPILER_RT_HAS_UBSAN)
-    add_subdirectory(cfi)
-  endif()
-  if(COMPILER_RT_HAS_SAFESTACK)
-    add_subdirectory(safestack)
-  endif()
-  if(COMPILER_RT_HAS_ESAN)
-    add_subdirectory(esan)
-  endif()
-  if(COMPILER_RT_HAS_SCUDO)
-    add_subdirectory(scudo)
-  endif()
-  if(COMPILER_RT_HAS_XRAY)
-    add_subdirectory(xray)
+  if(COMPILER_RT_BUILD_XRAY)
+    compiler_rt_test_runtime(xray)
   endif()
 endif()
 
diff --git a/test/asan/CMakeLists.txt b/test/asan/CMakeLists.txt
index a766f54..8bfc15b 100644
--- a/test/asan/CMakeLists.txt
+++ b/test/asan/CMakeLists.txt
@@ -3,9 +3,17 @@
 set(ASAN_TESTSUITES)
 set(ASAN_DYNAMIC_TESTSUITES)
 
-# TODO(wwchrome): Re-enable Win64 asan tests when ready.
-# Disable tests for asan Win64 temporarily.
-if(OS_NAME MATCHES "Windows" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+# Before Windows 8 (CMAKE_SYSTEM_VERSION 6.2), reserving large regions of shadow
+# memory allocated physical memory for page tables, which made it very
+# unreliable. Remove the asan tests from check-all in this configuration.
+set(SHADOW_MAPPING_UNRELIABLE FALSE)
+if(OS_NAME MATCHES "Windows" AND CMAKE_SIZEOF_VOID_P EQUAL 8 AND
+    ${CMAKE_SYSTEM_VERSION} LESS 6.2)
+  set(SHADOW_MAPPING_UNRELIABLE TRUE)
+  message(WARNING "Disabling ASan tests because they are unreliable on Windows 7 and earlier")
+endif()
+
+if (SHADOW_MAPPING_UNRELIABLE)
   set(EXCLUDE_FROM_ALL TRUE)
 endif()
 
@@ -22,7 +30,7 @@
 set(ASAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
 if(NOT COMPILER_RT_STANDALONE_BUILD)
   list(APPEND ASAN_TEST_DEPS asan)
-  if(WIN32 AND COMPILER_RT_HAS_LLD_SOURCES)
+  if(NOT APPLE AND COMPILER_RT_HAS_LLD)
     list(APPEND ASAN_TEST_DEPS
       lld
     )
@@ -76,12 +84,13 @@
 endforeach()
 
 # iOS and iOS simulator test suites
-# These are not added into "check-all", in order to run these tests, you have to
-# manually call (from the build directory).  They also require that an extra env
+# These are not added into "check-all", in order to run these tests, use
+# "check-asan-iossim-x86_64" and similar. They also require that an extra env
 # variable to select which iOS device or simulator to use, e.g.:
-# $ SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER=BBE44C1C-8AAA-4000-8D06-91C89ED58172
-# $ ./bin/llvm-lit ./projects/compiler-rt/test/asan/IOSSimI386Config
+# SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER="iPhone 6"
 if(APPLE)
+  set(EXCLUDE_FROM_ALL ON)
+
   set(ASAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER})
   set(ASAN_TEST_IOS "1")
   pythonize_bool(ASAN_TEST_IOS)
@@ -100,6 +109,9 @@
       ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
       ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg
       )
+    add_lit_testsuite(check-asan-iossim-${arch} "AddressSanitizer iOS Simulator ${arch} tests"
+      ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/
+      DEPENDS ${ASAN_TEST_DEPS})
   endforeach()
 
   foreach (arch ${DARWIN_ios_ARCHS})
@@ -115,7 +127,12 @@
       ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
       ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg
       )
+    add_lit_testsuite(check-asan-ios-${arch} "AddressSanitizer iOS ${arch} tests"
+      ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/
+      DEPENDS ${ASAN_TEST_DEPS})
   endforeach()
+
+  set(EXCLUDE_FROM_ALL OFF)
 endif()
 
 # Add unit tests.
@@ -164,7 +181,7 @@
   endif()
 endif()
 
-# TODO(wwchrome): Re-enable the tests for asan Win64 when ready.
-if(OS_NAME MATCHES "Windows" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+# Reset EXCLUDE_FROM_ALL to its initial value.
+if (SHADOW_MAPPING_UNRELIABLE)
   set(EXCLUDE_FROM_ALL FALSE)
 endif()
diff --git a/test/asan/TestCases/Android/coverage-android.cc b/test/asan/TestCases/Android/coverage-android.cc
deleted file mode 100644
index cf4f33e..0000000
--- a/test/asan/TestCases/Android/coverage-android.cc
+++ /dev/null
@@ -1,147 +0,0 @@
-// Test for direct coverage writing with dlopen.
-
-// Test normal exit, coverage level 1.
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSO_DIR=\"%device\" %s -o %t
-
-// RUN: adb shell rm -rf %device/coverage-android
-// RUN: rm -rf %T/coverage-android
-
-// RUN: adb shell mkdir -p %device/coverage-android/direct
-// RUN: mkdir -p %T/coverage-android/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t
-// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct
-// RUN: ls; pwd
-// RUN: cd %T/coverage-android/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK1 %s
-
-
-// Test sudden death, coverage level 1.
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSO_DIR=\"%device\" %s -o %t
-
-// RUN: adb shell rm -rf %device/coverage-android-kill
-// RUN: rm -rf %T/coverage-android-kill
-
-// RUN: adb shell mkdir -p %device/coverage-android-kill/direct
-// RUN: mkdir -p %T/coverage-android-kill/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t
-// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct
-// RUN: ls; pwd
-// RUN: cd %T/coverage-android-kill/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK1 %s
-
-
-// Test normal exit, coverage level 2.
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%device\" %s -o %t
-
-// RUN: adb shell rm -rf %device/coverage-android
-// RUN: rm -rf %T/coverage-android
-
-// RUN: adb shell mkdir -p %device/coverage-android/direct
-// RUN: mkdir -p %T/coverage-android/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t
-// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct
-// RUN: ls; pwd
-// RUN: cd %T/coverage-android/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK2 %s
-
-
-// Test sudden death, coverage level 2.
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%device\" %s -o %t
-
-// RUN: adb shell rm -rf %device/coverage-android-kill
-// RUN: rm -rf %T/coverage-android-kill
-
-// RUN: adb shell mkdir -p %device/coverage-android-kill/direct
-// RUN: mkdir -p %T/coverage-android-kill/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t
-// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct
-// RUN: ls; pwd
-// RUN: cd %T/coverage-android-kill/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK2 %s
-
-
-// Test normal exit, coverage level 3.
-// RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED %s -shared -o %T/libcoverage_android_test_1.so -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%device\" %s -o %t
-
-// RUN: adb shell rm -rf %device/coverage-android
-// RUN: rm -rf %T/coverage-android
-
-// RUN: adb shell mkdir -p %device/coverage-android/direct
-// RUN: mkdir -p %T/coverage-android/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android/direct:verbosity=1 %run %t
-// RUN: adb pull %device/coverage-android/direct %T/coverage-android/direct
-// RUN: ls; pwd
-// RUN: cd %T/coverage-android/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK3 %s
-
-
-// Test sudden death, coverage level 3.
-// RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED -DKILL %s -shared -o %T/libcoverage_android_test_1.so -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%device\" %s -o %t
-
-// RUN: adb shell rm -rf %device/coverage-android-kill
-// RUN: rm -rf %T/coverage-android-kill
-
-// RUN: adb shell mkdir -p %device/coverage-android-kill/direct
-// RUN: mkdir -p %T/coverage-android-kill/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%device/coverage-android-kill/direct:verbosity=1 not %run %t
-// RUN: adb pull %device/coverage-android-kill/direct %T/coverage-android-kill/direct
-// RUN: ls; pwd
-// RUN: cd %T/coverage-android-kill/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov |& FileCheck --check-prefix=CHECK3 %s
-
-// PC counts in CHECK lines are platform dependent and match arm32 at the moment.
-// sancov tool does not support Android well enough to match function names
-// REQUIRES: arm
-
-#include <assert.h>
-#include <dlfcn.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <signal.h>
-
-#ifdef SHARED
-extern "C" {
-void bar() {
-  printf("bar\n");
-#ifdef KILL
-  kill(getpid(), SIGKILL);
-#endif
-}
-}
-#else
-
-volatile int sink;
-
-int main(int argc, char **argv) {
-  fprintf(stderr, "PID: %d\n", getpid());
-  void *handle1 =
-      dlopen(SO_DIR "/libcoverage_android_test_1.so", RTLD_LAZY);
-  assert(handle1);
-
-  if (argc == 0)
-    sink = 0;
-
-  void (*bar1)() = (void (*)())dlsym(handle1, "bar");
-  assert(bar1);
-  bar1();
-
-  return 0;
-}
-#endif
-
-// CHECK1: 2 PCs total
-// CHECK2: 4 PCs total
-// CHECK3: 5 PCs total
diff --git a/test/asan/TestCases/Darwin/address-range-limit.mm b/test/asan/TestCases/Darwin/address-range-limit.mm
index ba9175a..5f0fd89 100644
--- a/test/asan/TestCases/Darwin/address-range-limit.mm
+++ b/test/asan/TestCases/Darwin/address-range-limit.mm
@@ -3,6 +3,9 @@
 // RUN: %clangxx_asan %s -Wno-deprecated-declarations -flat_namespace -bundle -undefined suppress -o %t.bundle
 // RUN: %clangxx_asan %s -Wno-deprecated-declarations -o %t -framework Foundation && not %run %t 2>&1 | FileCheck %s
 
+// NSCreateObjectFileImageFromFile/NSLinkModule isn't available on iOS
+// UNSUPPORTED: ios
+
 #import <Foundation/Foundation.h>
 #import <mach-o/dyld.h>
 
diff --git a/test/asan/TestCases/Darwin/atos-symbolizer-dyld-root-path.cc b/test/asan/TestCases/Darwin/atos-symbolizer-dyld-root-path.cc
index d2facd6..fc3d0dd 100644
--- a/test/asan/TestCases/Darwin/atos-symbolizer-dyld-root-path.cc
+++ b/test/asan/TestCases/Darwin/atos-symbolizer-dyld-root-path.cc
@@ -6,6 +6,9 @@
 // Due to a bug in atos, this only works on x86_64.
 // REQUIRES: asan-64-bits
 
+// Path returned by `which atos` is invalid on iOS.
+// UNSUPPORTED: ios
+
 #include <stdlib.h>
 #include <string.h>
 int main(int argc, char **argv) {
diff --git a/test/asan/TestCases/Darwin/atos-symbolizer.cc b/test/asan/TestCases/Darwin/atos-symbolizer.cc
index b4a868e..e7d7e7a 100644
--- a/test/asan/TestCases/Darwin/atos-symbolizer.cc
+++ b/test/asan/TestCases/Darwin/atos-symbolizer.cc
@@ -3,6 +3,9 @@
 // RUN: %clangxx_asan -O0 %s -o %t
 // RUN: %env_asan_opts=verbosity=2 ASAN_SYMBOLIZER_PATH=$(which atos) not %run %t 2>&1 | FileCheck %s
 
+// Path returned by `which atos` is invalid on iOS.
+// UNSUPPORTED: ios, i386-darwin
+
 #include <stdlib.h>
 #include <string.h>
 int main(int argc, char **argv) {
diff --git a/test/asan/TestCases/Darwin/dead-strip.c b/test/asan/TestCases/Darwin/dead-strip.c
index f87a5e5..8165fcd 100644
--- a/test/asan/TestCases/Darwin/dead-strip.c
+++ b/test/asan/TestCases/Darwin/dead-strip.c
@@ -6,6 +6,7 @@
 // runtime is able to register globals in the __DATA,__asan_globals section.
 
 // REQUIRES: osx-ld64-live_support
+// UNSUPPORTED: ios
 // RUN: %clang_asan -mmacosx-version-min=10.11 -Xlinker -dead_strip -o %t %s
 // RUN: llvm-nm -format=posix %t | FileCheck --check-prefix NM-CHECK %s
 // RUN: not %run %t 2>&1 | FileCheck --check-prefix ASAN-CHECK %s
diff --git a/test/asan/TestCases/Darwin/dladdr-demangling.cc b/test/asan/TestCases/Darwin/dladdr-demangling.cc
index 6f52b93..fb6f6d7 100644
--- a/test/asan/TestCases/Darwin/dladdr-demangling.cc
+++ b/test/asan/TestCases/Darwin/dladdr-demangling.cc
@@ -5,6 +5,9 @@
 // RUN: not %run %t 2>&1 | FileCheck %s
 // RUN: %env_asan_opts=verbosity=2 not %run sandbox-exec -p '(version 1)(allow default)(deny process-fork)' %t 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-DLADDR
 
+// sandbox-exec isn't available on iOS
+// UNSUPPORTED: ios
+
 #include <stdlib.h>
 
 class MyClass {
diff --git a/test/asan/TestCases/Darwin/dump_registers.cc b/test/asan/TestCases/Darwin/dump_registers.cc
index 884ad2e..42db446 100644
--- a/test/asan/TestCases/Darwin/dump_registers.cc
+++ b/test/asan/TestCases/Darwin/dump_registers.cc
@@ -18,7 +18,7 @@
     assert(0 && "Your computer is weird.");
 
   char c = *ptr;  // BOOM
-  // CHECK: ERROR: AddressSanitizer: SEGV
+  // CHECK: ERROR: AddressSanitizer: {{SEGV|BUS}}
   // CHECK: Register values:
   // CHECK: {{0x55555555|0x6666666666666666}}
   fprintf(stderr, "World\n");
diff --git a/test/asan/TestCases/Darwin/dyld_insert_libraries_reexec.cc b/test/asan/TestCases/Darwin/dyld_insert_libraries_reexec.cc
index b22036a..5c975b8 100644
--- a/test/asan/TestCases/Darwin/dyld_insert_libraries_reexec.cc
+++ b/test/asan/TestCases/Darwin/dyld_insert_libraries_reexec.cc
@@ -1,6 +1,8 @@
 // When DYLD-inserting the ASan dylib from a different location than the
 // original, make sure we don't try to reexec.
 
+// UNSUPPORTED: ios
+
 // RUN: mkdir -p %T/dyld_insert_libraries_reexec
 // RUN: cp `%clang_asan %s -fsanitize=address -### 2>&1 \
 // RUN:   | grep "libclang_rt.asan_osx_dynamic.dylib" \
diff --git a/test/asan/TestCases/Darwin/dyld_insert_libraries_remove.cc b/test/asan/TestCases/Darwin/dyld_insert_libraries_remove.cc
index a3af8c1..69d8497 100644
--- a/test/asan/TestCases/Darwin/dyld_insert_libraries_remove.cc
+++ b/test/asan/TestCases/Darwin/dyld_insert_libraries_remove.cc
@@ -2,6 +2,8 @@
 // the ASan dylib from the environment variable (both when using an absolute
 // or relative path) and also that the other dylibs are left untouched.
 
+// UNSUPPORTED: ios
+
 // RUN: mkdir -p %T/dyld_insert_libraries_remove
 // RUN: cp `%clang_asan %s -fsanitize=address -### 2>&1 \
 // RUN:   | grep "libclang_rt.asan_osx_dynamic.dylib" \
diff --git a/test/asan/TestCases/Darwin/haswell-symbolication.cc b/test/asan/TestCases/Darwin/haswell-symbolication.cc
index 59c938c..7856c4d 100644
--- a/test/asan/TestCases/Darwin/haswell-symbolication.cc
+++ b/test/asan/TestCases/Darwin/haswell-symbolication.cc
@@ -48,6 +48,7 @@
 
 // REQUIRES: x86-target-arch
 // REQUIRES: x86_64h
+// UNSUPPORTED: ios
 
 #include <sanitizer/common_interface_defs.h>
 #include <stdio.h>
diff --git a/test/asan/TestCases/Darwin/interface_symbols_darwin.c b/test/asan/TestCases/Darwin/interface_symbols_darwin.c
index ed5779e..09af1ec 100644
--- a/test/asan/TestCases/Darwin/interface_symbols_darwin.c
+++ b/test/asan/TestCases/Darwin/interface_symbols_darwin.c
@@ -3,62 +3,34 @@
 // ../Linux/interface_symbols.c
 
 // RUN: %clang_asan -dead_strip -O2 %s -o %t.exe
-// RUN: rm -f %t.symbols %t.interface
-
+//
+// note: we can not use -D on Darwin.
 // RUN: nm -g `%clang_asan %s -fsanitize=address -### 2>&1 | grep "libclang_rt.asan_osx_dynamic.dylib" | sed -e 's/.*"\(.*libclang_rt.asan_osx_dynamic.dylib\)".*/\1/'` \
-// RUN:   | grep " T " | sed "s/.* T //" \
-// RUN:   | grep "__asan_" | sed "s/___asan_/__asan_/" \
-// RUN:   | sed -E "s/__asan_version_mismatch_check_v[0-9]+/__asan_version_mismatch_check/" \
-// RUN:   | grep -v "__asan_default_options" \
-// RUN:   | grep -v "__asan_on_error" > %t.symbols
+// RUN:  | grep " [TU] "                                                       \
+// RUN:  | grep -o "\(__asan_\|__ubsan_\|__sancov_\|__sanitizer_\)[^ ]*"       \
+// RUN:  | grep -v "__sanitizer_syscall"                                       \
+// RUN:  | grep -v "__sanitizer_weak_hook"                                     \
+// RUN:  | grep -v "__sanitizer_mz"                                            \
+// RUN:  | grep -v "__ubsan_handle_dynamic_type_cache_miss"                    \
+// RUN:  | sed -e "s/__asan_version_mismatch_check_v[0-9]+/__asan_version_mismatch_check/" \
+// RUN:  > %t.exports
+//
+// RUN: grep -e "INTERFACE_\(WEAK_\)\?FUNCTION"                                \
+// RUN:  %p/../../../../lib/asan/asan_interface.inc                            \
+// RUN:  %p/../../../../lib/ubsan/ubsan_interface.inc                          \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_common_interface.inc    \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_common_interface_posix.inc \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_coverage_interface.inc  \
+// RUN:  | grep -v "__sanitizer_weak_hook"                                     \
+// RUN:  | sed -e "s/.*(//" -e "s/).*//" > %t.imports
+//
+// RUN: cat %t.imports | sort | uniq > %t.imports-sorted
+// RUN: cat %t.exports | sort | uniq > %t.exports-sorted
+//
+// RUN: echo
+// RUN: echo "=== NOTE === If you see a mismatch below, please update sanitizer_interface.inc files."
+// RUN: diff %t.imports-sorted %t.exports-sorted
 
-// RUN: cat %p/../../../../lib/asan/asan_interface_internal.h \
-// RUN:    | sed "s/\/\/.*//" | sed "s/typedef.*//" \
-// RUN:    | grep -v "OPTIONAL" \
-// RUN:    | grep "__asan_.*(" | sed "s/.* __asan_/__asan_/;s/(.*//" \
-// RUN:    > %t.interface
-// RUN: echo __asan_report_load1 >> %t.interface
-// RUN: echo __asan_report_load2 >> %t.interface
-// RUN: echo __asan_report_load4 >> %t.interface
-// RUN: echo __asan_report_load8 >> %t.interface
-// RUN: echo __asan_report_load16 >> %t.interface
-// RUN: echo __asan_report_store1 >> %t.interface
-// RUN: echo __asan_report_store2 >> %t.interface
-// RUN: echo __asan_report_store4 >> %t.interface
-// RUN: echo __asan_report_store8 >> %t.interface
-// RUN: echo __asan_report_store16 >> %t.interface
-// RUN: echo __asan_report_load_n >> %t.interface
-// RUN: echo __asan_report_store_n >> %t.interface
-// RUN: echo __asan_report_load1_noabort >> %t.interface
-// RUN: echo __asan_report_load2_noabort >> %t.interface
-// RUN: echo __asan_report_load4_noabort >> %t.interface
-// RUN: echo __asan_report_load8_noabort >> %t.interface
-// RUN: echo __asan_report_load16_noabort >> %t.interface
-// RUN: echo __asan_report_store1_noabort >> %t.interface
-// RUN: echo __asan_report_store2_noabort >> %t.interface
-// RUN: echo __asan_report_store4_noabort >> %t.interface
-// RUN: echo __asan_report_store8_noabort >> %t.interface
-// RUN: echo __asan_report_store16_noabort >> %t.interface
-// RUN: echo __asan_report_load_n_noabort >> %t.interface
-// RUN: echo __asan_report_store_n_noabort >> %t.interface
-// RUN: echo __asan_report_exp_load1 >> %t.interface
-// RUN: echo __asan_report_exp_load2 >> %t.interface
-// RUN: echo __asan_report_exp_load4 >> %t.interface
-// RUN: echo __asan_report_exp_load8 >> %t.interface
-// RUN: echo __asan_report_exp_load16 >> %t.interface
-// RUN: echo __asan_report_exp_store1 >> %t.interface
-// RUN: echo __asan_report_exp_store2 >> %t.interface
-// RUN: echo __asan_report_exp_store4 >> %t.interface
-// RUN: echo __asan_report_exp_store8 >> %t.interface
-// RUN: echo __asan_report_exp_store16 >> %t.interface
-// RUN: echo __asan_report_exp_load_n >> %t.interface
-// RUN: echo __asan_report_exp_store_n >> %t.interface
-// RUN: echo __asan_get_current_fake_stack >> %t.interface
-// RUN: echo __asan_addr_is_in_fake_stack >> %t.interface
-
-// RUN: for i in `jot - 0 10`; do echo __asan_stack_malloc_$i >> %t.interface; done
-// RUN: for i in `jot - 0 10`; do echo __asan_stack_free_$i >> %t.interface; done
-
-// RUN: cat %t.interface | sort -u | diff %t.symbols -
+// UNSUPPORTED: ios
 
 int main() { return 0; }
diff --git a/test/asan/TestCases/Darwin/malloc_set_zone_name-mprotect.cc b/test/asan/TestCases/Darwin/malloc_set_zone_name-mprotect.cc
index 2c643bc..b9b96ef 100644
--- a/test/asan/TestCases/Darwin/malloc_set_zone_name-mprotect.cc
+++ b/test/asan/TestCases/Darwin/malloc_set_zone_name-mprotect.cc
@@ -47,5 +47,6 @@
     memset(mem[i], 'a', 8 * (i % kNumIter));
     free(mem[i]);
   }
+  malloc_destroy_zone(zone);
   return 0;
 }
diff --git a/test/asan/TestCases/Darwin/nil-return-struct.mm b/test/asan/TestCases/Darwin/nil-return-struct.mm
new file mode 100644
index 0000000..9fb77e7
--- /dev/null
+++ b/test/asan/TestCases/Darwin/nil-return-struct.mm
@@ -0,0 +1,31 @@
+// RUN: %clang_asan %s -o %t -framework Foundation
+// RUN: %run %t 2>&1 | FileCheck %s
+
+#import <Foundation/Foundation.h>
+
+struct MyStruct {
+  long a, b, c, d;
+};
+
+@interface MyClass: NSObject
+- (MyStruct)methodWhichReturnsARect;
+@end
+@implementation MyClass
+- (MyStruct)methodWhichReturnsARect {
+  MyStruct s;
+  s.a = 10;
+  s.b = 20;
+  s.c = 30;
+  s.d = 40;
+  return s;
+}
+@end
+
+int main() {
+  MyClass *myNil = nil;  // intentionally nil
+  [myNil methodWhichReturnsARect];
+  fprintf(stderr, "Hello world");
+}
+
+// CHECK-NOT: AddressSanitizer: stack-use-after-scope
+// CHECK: Hello world
diff --git a/test/asan/TestCases/Darwin/reexec-insert-libraries-env.cc b/test/asan/TestCases/Darwin/reexec-insert-libraries-env.cc
index aa4d92b..cd277a0 100644
--- a/test/asan/TestCases/Darwin/reexec-insert-libraries-env.cc
+++ b/test/asan/TestCases/Darwin/reexec-insert-libraries-env.cc
@@ -7,7 +7,7 @@
 // RUN:     -dynamiclib -o darwin-dummy-shared-lib-so.dylib
 
 // FIXME: the following command line may hang in the case of a regression.
-// RUN: env DYLD_INSERT_LIBRARIES=darwin-dummy-shared-lib-so.dylib \
+// RUN: %env DYLD_INSERT_LIBRARIES=darwin-dummy-shared-lib-so.dylib \
 // RUN:     %run %t 2>&1 | FileCheck %s || exit 1
 
 #if !defined(SHARED_LIB)
diff --git a/test/asan/TestCases/Darwin/sandbox-symbolizer.cc b/test/asan/TestCases/Darwin/sandbox-symbolizer.cc
index 4310f9c..b36c4fa 100644
--- a/test/asan/TestCases/Darwin/sandbox-symbolizer.cc
+++ b/test/asan/TestCases/Darwin/sandbox-symbolizer.cc
@@ -12,6 +12,9 @@
 // RUN: not %run sandbox-exec -p '(version 1)(allow default)(deny mach-priv-task-port)' %t 2>&1 | FileCheck %s
 // RUN: env ASAN_SYMBOLIZER_PATH="" not %run sandbox-exec -p '(version 1)(allow default)(deny mach-priv-task-port)' %t 2>&1 | FileCheck %s
 
+// sandbox-exec isn't available on iOS
+// UNSUPPORTED: ios
+
 #include <stdlib.h>
 int main() {
   char *x = (char*)malloc(10 * sizeof(char));
diff --git a/test/asan/TestCases/Darwin/scribble.cc b/test/asan/TestCases/Darwin/scribble.cc
index 757cc77..8303cf3 100644
--- a/test/asan/TestCases/Darwin/scribble.cc
+++ b/test/asan/TestCases/Darwin/scribble.cc
@@ -1,10 +1,8 @@
 // RUN: %clang_asan -O2 %s -o %t
 // RUN: %run %t 2>&1 | FileCheck --check-prefix=CHECK-NOSCRIBBLE %s
-// RUN: env MallocScribble=1 MallocPreScribble=1 %run %t 2>&1 | FileCheck --check-prefix=CHECK-SCRIBBLE %s
+// RUN: %env MallocScribble=1 MallocPreScribble=1 %run %t 2>&1 | FileCheck --check-prefix=CHECK-SCRIBBLE %s
 // RUN: %env_asan_opts=max_free_fill_size=4096 %run %t 2>&1 | FileCheck --check-prefix=CHECK-SCRIBBLE %s
 
-// UNSUPPORTED: ios
-
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -56,4 +54,5 @@
   fprintf(stderr, "okthxbai!\n");
   // CHECK-SCRIBBLE: okthxbai!
   // CHECK-NOSCRIBBLE: okthxbai!
+  free(my_class_isa);
 }
diff --git a/test/asan/TestCases/Darwin/suppressions-darwin.cc b/test/asan/TestCases/Darwin/suppressions-darwin.cc
index a177c4e..8c207b1 100644
--- a/test/asan/TestCases/Darwin/suppressions-darwin.cc
+++ b/test/asan/TestCases/Darwin/suppressions-darwin.cc
@@ -27,6 +27,7 @@
                               kCFStringEncodingUTF8, FALSE); // BOOM
   fprintf(stderr, "Ignored.\n");
   free(a);
+  CFRelease(str);
 }
 
 // CHECK-CRASH: AddressSanitizer: heap-buffer-overflow
diff --git a/test/asan/TestCases/Darwin/suppressions-sandbox.cc b/test/asan/TestCases/Darwin/suppressions-sandbox.cc
index ddbad46..966f213 100644
--- a/test/asan/TestCases/Darwin/suppressions-sandbox.cc
+++ b/test/asan/TestCases/Darwin/suppressions-sandbox.cc
@@ -8,6 +8,9 @@
 // RUN:   sandbox-exec -p '(version 1)(allow default)(deny process-fork)' \
 // RUN:   %run %t 2>&1 | FileCheck --check-prefix=CHECK-IGNORE %s
 
+// sandbox-exec isn't available on iOS
+// UNSUPPORTED: ios
+
 #include <CoreFoundation/CoreFoundation.h>
 
 int main() {
@@ -18,6 +21,7 @@
                               kCFStringEncodingUTF8, FALSE);  // BOOM
   fprintf(stderr, "Ignored.\n");
   free(a);
+  CFRelease(str);
 }
 
 // CHECK-CRASH: AddressSanitizer: heap-buffer-overflow
diff --git a/test/asan/TestCases/Darwin/unset-insert-libraries-on-exec.cc b/test/asan/TestCases/Darwin/unset-insert-libraries-on-exec.cc
index f8a330a..62cf853 100644
--- a/test/asan/TestCases/Darwin/unset-insert-libraries-on-exec.cc
+++ b/test/asan/TestCases/Darwin/unset-insert-libraries-on-exec.cc
@@ -10,7 +10,7 @@
 // execl().
 
 // RUN: %run %t %T/echo-env >/dev/null 2>&1
-// RUN: env DYLD_INSERT_LIBRARIES=%t-darwin-dummy-shared-lib-so.dylib \
+// RUN: %env DYLD_INSERT_LIBRARIES=%t-darwin-dummy-shared-lib-so.dylib \
 // RUN:     %run %t %T/echo-env 2>&1 | FileCheck %s || exit 1
 
 #if !defined(SHARED_LIB)
diff --git a/test/asan/TestCases/Darwin/uuid.cc b/test/asan/TestCases/Darwin/uuid.cc
index 3f50272..3363858 100644
--- a/test/asan/TestCases/Darwin/uuid.cc
+++ b/test/asan/TestCases/Darwin/uuid.cc
@@ -4,6 +4,9 @@
 // RUN: %clangxx_asan %s -o %t -fsanitize-recover=address
 // RUN: %env_asan_opts=print_module_map=2:halt_on_error=0     %run %t 2>&1 | FileCheck %s
 
+// We can't run system("otool") in the simulator.
+// UNSUPPORTED: ios
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/test/asan/TestCases/Linux/allocator_oom_test.cc b/test/asan/TestCases/Linux/allocator_oom_test.cc
new file mode 100644
index 0000000..33b6677
--- /dev/null
+++ b/test/asan/TestCases/Linux/allocator_oom_test.cc
@@ -0,0 +1,86 @@
+// Test the behavior of malloc/calloc/realloc when the allocation causes OOM
+// in the secondary allocator.
+// By default (allocator_may_return_null=0) the process should crash.
+// With allocator_may_return_null=1 the allocator should return 0.
+// Set the limit to 20.5T on 64 bits to account for ASan shadow memory,
+// allocator buffers etc. so that the test allocation of ~1T will trigger OOM.
+// Limit this test to Linux since we're relying on allocator internal
+// limits (shadow memory size, allocation limits etc.)
+
+// RUN: %clangxx_asan -O0 %s -o %t
+// RUN: ulimit -v 22024290304
+// RUN: not %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-MALLOC,CHECK-CRASH
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-MALLOC,CHECK-CRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-MALLOC,CHECK-NULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-CALLOC,CHECK-CRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-CALLOC,CHECK-NULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-REALLOC,CHECK-CRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-REALLOC,CHECK-NULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-MALLOC-REALLOC,CHECK-CRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK-MALLOC-REALLOC,CHECK-NULL
+
+// ASan shadow memory on s390 is too large for this test.
+// TODO(alekseys): Android lit do not run ulimit on device.
+// UNSUPPORTED: s390,android
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+
+int main(int argc, char **argv) {
+  assert(argc == 2);
+  const char *action = argv[1];
+  fprintf(stderr, "%s:\n", action);
+
+  // Allocate just a bit less than max allocation size enforced by ASan's
+  // allocator (currently 1T and 3G).
+  const size_t size =
+#if __LP64__
+      (1ULL << 40) - (1ULL << 30);
+#else
+      (3ULL << 30) - (1ULL << 20);
+#endif
+
+  void *x = 0;
+
+  if (!strcmp(action, "malloc")) {
+    x = malloc(size);
+  } else if (!strcmp(action, "calloc")) {
+    x = calloc(size / 4, 4);
+  } else if (!strcmp(action, "realloc")) {
+    x = realloc(0, size);
+  } else if (!strcmp(action, "realloc-after-malloc")) {
+    char *t = (char*)malloc(100);
+    *t = 42;
+    x = realloc(t, size);
+    assert(*t == 42);
+    free(t);
+  } else {
+    assert(0);
+  }
+
+  // The NULL pointer is printed differently on different systems, while (long)0
+  // is always the same.
+  fprintf(stderr, "x: %lx\n", (long)x);
+  free(x);
+
+  return x != 0;
+}
+
+// CHECK-MALLOC: malloc:
+// CHECK-CALLOC: calloc:
+// CHECK-REALLOC: realloc:
+// CHECK-MALLOC-REALLOC: realloc-after-malloc:
+
+// CHECK-CRASH: AddressSanitizer's allocator is terminating the process
+// CHECK-NULL: x: 0
diff --git a/test/asan/TestCases/Linux/asan_dlopen_test.cc b/test/asan/TestCases/Linux/asan_dlopen_test.cc
index f1e31b0..5081b77 100644
--- a/test/asan/TestCases/Linux/asan_dlopen_test.cc
+++ b/test/asan/TestCases/Linux/asan_dlopen_test.cc
@@ -2,6 +2,8 @@
 //
 // RUN: %clangxx %s -DRT=\"%shared_libasan\" -o %t -ldl
 // RUN: not %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=verify_asan_link_order=true not %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=verify_asan_link_order=false %run %t 2>&1
 // REQUIRES: asan-dynamic-runtime
 // XFAIL: android
 
diff --git a/test/asan/TestCases/Linux/asan_preload_test-3.cc b/test/asan/TestCases/Linux/asan_preload_test-3.cc
new file mode 100644
index 0000000..e998ff6
--- /dev/null
+++ b/test/asan/TestCases/Linux/asan_preload_test-3.cc
@@ -0,0 +1,36 @@
+// Regression test for PR33206
+//
+// RUN: %clang -DDYN=1 -DMALLOC=1 -fPIC -shared %s -o %t-dso1.so
+// RUN: %clang -DDYN=1 -DMALLOC=1 -fPIC -shared %s -o %t-dso2.so %t-dso1.so
+// RUN: %clang %s -o %t-1 %t-dso2.so
+// RUN: env LD_PRELOAD=%shared_libasan %run %t-1 2>&1 | FileCheck %s
+// RUN: %clang -DDYN=1 -DREALLOC=1 -fPIC -shared %s -o %t-dso3.so
+// RUN: %clang -DDYN=1 -DREALLOC=1 -fPIC -shared %s -o %t-dso4.so %t-dso3.so
+// RUN: %clang %s -o %t-2 %t-dso4.so
+// RUN: env LD_PRELOAD=%shared_libasan %run %t-2 2>&1 | FileCheck %s
+// REQUIRES: asan-dynamic-runtime
+
+// FIXME: Test regressed while android bot was disabled. Needs investigation.
+// UNSUPPORTED: android
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef DYN
+__attribute__((constructor)) void foo() {
+  void *p;
+#ifdef MALLOC
+  p = malloc(1 << 20);
+#endif
+#ifdef REALLOC
+  p = realloc (0, 1 << 20);
+#endif
+  free(p);
+}
+#else
+int main() {
+  // CHECK: Success
+  printf("Success\n");
+  return 0;
+}
+#endif
diff --git a/test/asan/TestCases/Linux/clang_gcc_abi.cc b/test/asan/TestCases/Linux/clang_gcc_abi.cc
index 845f412..79710dc 100644
--- a/test/asan/TestCases/Linux/clang_gcc_abi.cc
+++ b/test/asan/TestCases/Linux/clang_gcc_abi.cc
@@ -3,7 +3,7 @@
 // RUN: %clangxx_asan -O2 -x c %s -o %t && not %run %t 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -O3 -x c %s -o %t && not %run %t 2>&1 | FileCheck %s
 
-// REQUIRES: arm-target-arch
+// REQUIRES: arm-target-arch, fast-unwinder-works
 // XFAIL: armv7l-unknown-linux-gnueabihf
 
 #include <stdlib.h>
diff --git a/test/asan/TestCases/Linux/coverage-missing.cc b/test/asan/TestCases/Linux/coverage-missing.cc
index 49487d3..585aee6 100644
--- a/test/asan/TestCases/Linux/coverage-missing.cc
+++ b/test/asan/TestCases/Linux/coverage-missing.cc
@@ -1,47 +1,49 @@
 // Test for "sancov.py missing ...".
 
 // First case: coverage from executable. main() is called on every code path.
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t -DFOOBAR -DMAIN
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s -o %t -DFOOBAR -DMAIN
 // RUN: rm -rf %T/coverage-missing
 // RUN: mkdir -p %T/coverage-missing
 // RUN: cd %T/coverage-missing
 // RUN: %env_asan_opts=coverage=1:coverage_dir=%T/coverage-missing %run %t
 // RUN: %sancov print *.sancov > main.txt
 // RUN: rm *.sancov
-// RUN: [ $(cat main.txt | wc -l) == 1 ]
+// RUN: count 1 < main.txt
 // RUN: %env_asan_opts=coverage=1:coverage_dir=%T/coverage-missing %run %t x
 // RUN: %sancov print *.sancov > foo.txt
 // RUN: rm *.sancov
-// RUN: [ $(cat foo.txt | wc -l) == 3 ]
+// RUN: count 3 < foo.txt
 // RUN: %env_asan_opts=coverage=1:coverage_dir=%T/coverage-missing %run %t x x
 // RUN: %sancov print *.sancov > bar.txt
 // RUN: rm *.sancov
-// RUN: [ $(cat bar.txt | wc -l) == 4 ]
+// RUN: count 4 < bar.txt
 // RUN: %sancov missing %t < foo.txt > foo-missing.txt
 // RUN: sort main.txt foo-missing.txt -o foo-missing-with-main.txt
 // The "missing from foo" set may contain a few bogus PCs from the sanitizer
 // runtime, but it must include the entire "bar" code path as a subset. Sorted
 // lists can be tested for set inclusion with diff + grep.
-// RUN: ( diff bar.txt foo-missing-with-main.txt || true ) | not grep "^<"
+// RUN: diff bar.txt foo-missing-with-main.txt > %t.log || true
+// RUN: not grep "^<" %t.log
 
 // Second case: coverage from DSO.
 // cd %T
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %dynamiclib -DFOOBAR -shared -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func %s %dynamiclib -o %t -DMAIN
-// RUN: export LIBNAME=`basename %dynamiclib`
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s -o %dynamiclib -DFOOBAR -shared -fPIC
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %dynamiclib -o %t -DMAIN
+// RUN: cd ..
 // RUN: rm -rf %T/coverage-missing
 // RUN: mkdir -p %T/coverage-missing
 // RUN: cd %T/coverage-missing
 // RUN: %env_asan_opts=coverage=1:coverage_dir=%T/coverage-missing %run %t x
-// RUN: %sancov print $LIBNAME.*.sancov > foo.txt
+// RUN: %sancov print %xdynamiclib_filename.*.sancov > foo.txt
 // RUN: rm *.sancov
-// RUN: [ $(cat foo.txt | wc -l) == 2 ]
+// RUN: count 2 < foo.txt
 // RUN: %env_asan_opts=coverage=1:coverage_dir=%T/coverage-missing %run %t x x
-// RUN: %sancov print $LIBNAME.*.sancov > bar.txt
+// RUN: %sancov print %xdynamiclib_filename.*.sancov > bar.txt
 // RUN: rm *.sancov
-// RUN: [ $(cat bar.txt | wc -l) == 3 ]
+// RUN: count 3 < bar.txt
 // RUN: %sancov missing %dynamiclib < foo.txt > foo-missing.txt
-// RUN: ( diff bar.txt foo-missing.txt || true ) | not grep "^<"
+// RUN: diff bar.txt foo-missing.txt > %t.log || true
+// RUN: not grep "^<" %t.log
 
 // REQUIRES: x86-target-arch
 // XFAIL: android
diff --git a/test/asan/TestCases/Linux/global-overflow-bfd.cc b/test/asan/TestCases/Linux/global-overflow-bfd.cc
new file mode 100644
index 0000000..117a761
--- /dev/null
+++ b/test/asan/TestCases/Linux/global-overflow-bfd.cc
@@ -0,0 +1,18 @@
+// Test that gc-sections-friendly instrumentation of globals does not introduce
+// false negatives with the BFD linker.
+// RUN: %clangxx_asan -fuse-ld=bfd -Wl,-gc-sections -ffunction-sections -fdata-sections -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
+
+#include <string.h>
+int main(int argc, char **argv) {
+  static char XXX[10];
+  static char YYY[10];
+  static char ZZZ[10];
+  memset(XXX, 0, 10);
+  memset(YYY, 0, 10);
+  memset(ZZZ, 0, 10);
+  int res = YYY[argc * 10];  // BOOOM
+  // CHECK: {{READ of size 1 at}}
+  // CHECK: {{located 0 bytes to the right of global variable}}
+  res += XXX[argc] + ZZZ[argc];
+  return res;
+}
diff --git a/test/asan/TestCases/Linux/global-overflow-lld.cc b/test/asan/TestCases/Linux/global-overflow-lld.cc
new file mode 100644
index 0000000..f4d0bc9
--- /dev/null
+++ b/test/asan/TestCases/Linux/global-overflow-lld.cc
@@ -0,0 +1,19 @@
+// Test that gc-sections-friendly instrumentation of globals does not introduce
+// false negatives with the LLD linker.
+// RUN: %clangxx_asan -fuse-ld=lld -Wl,-gc-sections -ffunction-sections -fdata-sections -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
+// REQUIRES: lld
+
+#include <string.h>
+int main(int argc, char **argv) {
+  static char XXX[10];
+  static char YYY[10];
+  static char ZZZ[10];
+  memset(XXX, 0, 10);
+  memset(YYY, 0, 10);
+  memset(ZZZ, 0, 10);
+  int res = YYY[argc * 10];  // BOOOM
+  // CHECK: {{READ of size 1 at}}
+  // CHECK: {{located 0 bytes to the right of global variable}}
+  res += XXX[argc] + ZZZ[argc];
+  return res;
+}
diff --git a/test/asan/TestCases/Linux/globals-gc-sections-lld.cc b/test/asan/TestCases/Linux/globals-gc-sections-lld.cc
new file mode 100644
index 0000000..0d8bcdd
--- /dev/null
+++ b/test/asan/TestCases/Linux/globals-gc-sections-lld.cc
@@ -0,0 +1,15 @@
+// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -fuse-ld=lld -ffunction-sections -fdata-sections -mllvm -asan-globals=0
+// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -fuse-ld=lld -ffunction-sections -fdata-sections -mllvm -asan-globals=1
+
+// https://code.google.com/p/address-sanitizer/issues/detail?id=260
+// REQUIRES: lld
+
+int undefined();
+
+// On i386 clang adds --export-dynamic when linking with ASan, which adds all
+// non-hidden globals to GC roots.
+__attribute__((visibility("hidden"))) int (*unused)() = undefined;
+
+int main() {
+        return 0;
+}
diff --git a/test/asan/TestCases/Linux/globals-gc-sections.cc b/test/asan/TestCases/Linux/globals-gc-sections.cc
deleted file mode 100644
index 72a9e94..0000000
--- a/test/asan/TestCases/Linux/globals-gc-sections.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -ffunction-sections -mllvm -asan-globals=0
-// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -ffunction-sections -mllvm -asan-globals=1
-
-// https://code.google.com/p/address-sanitizer/issues/detail?id=260
-// XFAIL: *
-
-int undefined();
-
-int (*unused)() = undefined;
-
-int main() {
-        return 0;
-}
diff --git a/test/asan/TestCases/Linux/init_fini_sections.cc b/test/asan/TestCases/Linux/init_fini_sections.cc
index c7234ee..3037b23 100644
--- a/test/asan/TestCases/Linux/init_fini_sections.cc
+++ b/test/asan/TestCases/Linux/init_fini_sections.cc
@@ -2,11 +2,18 @@
 
 #include <stdio.h>
 
+int c = 0;
+
 static void foo() {
-  printf("foo\n");
+  ++c;
+}
+
+static void fini() {
+  printf("fini\n");
 }
 
 int main() {
+  printf("c=%d\n", c);
   return 0;
 }
 
@@ -17,8 +24,7 @@
 void (*call_foo_2)(void) = &foo;
 
 __attribute__((section(".fini_array")))
-void (*call_foo_3)(void) = &foo;
+void (*call_foo_3)(void) = &fini;
 
-// CHECK: foo
-// CHECK: foo
-// CHECK: foo
+// CHECK: c=2
+// CHECK: fini
diff --git a/test/asan/TestCases/Linux/interface_symbols_linux.c b/test/asan/TestCases/Linux/interface_symbols_linux.c
index 2e64857..33fdd5c 100644
--- a/test/asan/TestCases/Linux/interface_symbols_linux.c
+++ b/test/asan/TestCases/Linux/interface_symbols_linux.c
@@ -1,59 +1,30 @@
 // Check the presence of interface symbols in compiled file.
 
 // RUN: %clang_asan -O2 %s -o %t.exe
-// RUN: nm -D %t.exe | grep " T " | sed "s/.* T //" \
-// RUN:    | grep "__asan_" | sed "s/___asan_/__asan_/" \
-// RUN:    | sed -E "s/__asan_version_mismatch_check_v[0-9]+/__asan_version_mismatch_check/" \
-// RUN:    | grep -v "__asan_default_options" \
-// RUN:    | grep -v "__asan_stack_" \
-// RUN:    | grep -v "__asan_on_error" > %t.symbols
-// RUN: cat %p/../../../../lib/asan/asan_interface_internal.h \
-// RUN:    | sed "s/\/\/.*//" | sed "s/typedef.*//" \
-// RUN:    | grep -v "OPTIONAL" \
-// RUN:    | grep "__asan_.*(" | sed "s/.* __asan_/__asan_/;s/(.*//" \
-// RUN:    > %t.interface
-// RUN: echo __asan_report_load1 >> %t.interface
-// RUN: echo __asan_report_load2 >> %t.interface
-// RUN: echo __asan_report_load4 >> %t.interface
-// RUN: echo __asan_report_load8 >> %t.interface
-// RUN: echo __asan_report_load16 >> %t.interface
-// RUN: echo __asan_report_store1 >> %t.interface
-// RUN: echo __asan_report_store2 >> %t.interface
-// RUN: echo __asan_report_store4 >> %t.interface
-// RUN: echo __asan_report_store8 >> %t.interface
-// RUN: echo __asan_report_store16 >> %t.interface
-// RUN: echo __asan_report_load_n >> %t.interface
-// RUN: echo __asan_report_store_n >> %t.interface
-// RUN: echo __asan_report_load1_noabort >> %t.interface
-// RUN: echo __asan_report_load2_noabort >> %t.interface
-// RUN: echo __asan_report_load4_noabort >> %t.interface
-// RUN: echo __asan_report_load8_noabort >> %t.interface
-// RUN: echo __asan_report_load16_noabort >> %t.interface
-// RUN: echo __asan_report_store1_noabort >> %t.interface
-// RUN: echo __asan_report_store2_noabort >> %t.interface
-// RUN: echo __asan_report_store4_noabort >> %t.interface
-// RUN: echo __asan_report_store8_noabort >> %t.interface
-// RUN: echo __asan_report_store16_noabort >> %t.interface
-// RUN: echo __asan_report_load_n_noabort >> %t.interface
-// RUN: echo __asan_report_store_n_noabort >> %t.interface
-// RUN: echo __asan_report_exp_load1 >> %t.interface
-// RUN: echo __asan_report_exp_load2 >> %t.interface
-// RUN: echo __asan_report_exp_load4 >> %t.interface
-// RUN: echo __asan_report_exp_load8 >> %t.interface
-// RUN: echo __asan_report_exp_load16 >> %t.interface
-// RUN: echo __asan_report_exp_store1 >> %t.interface
-// RUN: echo __asan_report_exp_store2 >> %t.interface
-// RUN: echo __asan_report_exp_store4 >> %t.interface
-// RUN: echo __asan_report_exp_store8 >> %t.interface
-// RUN: echo __asan_report_exp_store16 >> %t.interface
-// RUN: echo __asan_report_exp_load_n >> %t.interface
-// RUN: echo __asan_report_exp_store_n >> %t.interface
-// RUN: echo __asan_get_current_fake_stack >> %t.interface
-// RUN: echo __asan_addr_is_in_fake_stack >> %t.interface
-// RUN: echo __asan_alloca_poison >> %t.interface
-// RUN: echo __asan_allocas_unpoison >> %t.interface
-// RUN: cat %t.interface | sort -u | diff %t.symbols -
-
+// RUN: nm -D %t.exe | grep " [TWw] "                                          \
+// RUN:  | grep -o "\(__asan_\|__ubsan_\|__sancov_\|__sanitizer_\)[^ ]*"       \
+// RUN:  | grep -v "__sanitizer_syscall"                                       \
+// RUN:  | grep -v "__sanitizer_weak_hook"                                     \
+// RUN:  | grep -v "__ubsan_handle_dynamic_type_cache_miss"                    \
+// RUN:  | sed -e "s/__asan_version_mismatch_check_v[0-9]+/__asan_version_mismatch_check/" \
+// RUN:  > %t.exports
+//
+// RUN: grep -e "INTERFACE_\(WEAK_\)\?FUNCTION"                                \
+// RUN:  %p/../../../../lib/asan/asan_interface.inc                            \
+// RUN:  %p/../../../../lib/ubsan/ubsan_interface.inc                          \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_common_interface.inc    \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_common_interface_posix.inc \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_coverage_interface.inc  \
+// RUN:  | grep -v "__sanitizer_weak_hook"                                     \
+// RUN:  | sed -e "s/.*(//" -e "s/).*//" > %t.imports
+//
+// RUN: cat %t.imports | sort | uniq > %t.imports-sorted
+// RUN: cat %t.exports | sort | uniq > %t.exports-sorted
+//
+// RUN: echo
+// RUN: echo "=== NOTE === If you see a mismatch below, please update sanitizer_interface.inc files."
+// RUN: diff %t.imports-sorted %t.exports-sorted
+//
 // FIXME: nm -D on powerpc somewhy shows ASan interface symbols residing
 // in "initialized data section".
 // REQUIRES: x86-target-arch,asan-static-runtime
diff --git a/test/asan/TestCases/Linux/longjmp_chk.c b/test/asan/TestCases/Linux/longjmp_chk.c
new file mode 100644
index 0000000..99a4a16
--- /dev/null
+++ b/test/asan/TestCases/Linux/longjmp_chk.c
@@ -0,0 +1,51 @@
+// Verify that use of longjmp() in a _FORTIFY_SOURCE'd library (without ASAN)
+// is correctly intercepted such that the stack is unpoisoned.
+// Note: it is essential that the external library is not built with ASAN,
+// otherwise it would be able to unpoison the stack before use.
+//
+// RUN: %clang -DIS_LIBRARY -D_FORTIFY_SOURCE=2 -O2 %s -c -o %t.o
+// RUN: %clang_asan -O2 %s %t.o -o %t
+// RUN: %run %t
+
+#ifdef IS_LIBRARY
+/* the library */
+#include <setjmp.h>
+#include <assert.h>
+#include <sanitizer/asan_interface.h>
+
+static jmp_buf jenv;
+
+void external_callme(void (*callback)(void)) {
+  if (setjmp(jenv) == 0) {
+    callback();
+  }
+}
+
+void external_longjmp(char *msg) {
+  longjmp(jenv, 1);
+}
+
+void external_check_stack(void) {
+  char buf[256] = "";
+  for (int i = 0; i < 256; i++) {
+    assert(!__asan_address_is_poisoned(buf + i));
+  }
+}
+#else
+/* main program */
+extern void external_callme(void (*callback)(void));
+extern void external_longjmp(char *msg);
+extern void external_check_stack(void);
+
+static void callback(void) {
+  char msg[16];   /* Note: this triggers addition of a redzone. */
+  /* Note: msg is passed to prevent compiler optimization from removing it. */
+  external_longjmp(msg);
+}
+
+int main() {
+  external_callme(callback);
+  external_check_stack();
+  return 0;
+}
+#endif
diff --git a/test/asan/TestCases/Linux/preinstalled_signal.cc b/test/asan/TestCases/Linux/preinstalled_signal.cc
new file mode 100644
index 0000000..4d466c2
--- /dev/null
+++ b/test/asan/TestCases/Linux/preinstalled_signal.cc
@@ -0,0 +1,107 @@
+// clang-format off
+// RUN: %clangxx -std=c++11 %s -o %t
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s
+
+// RUN: %clangxx -std=c++11 -DTEST_INSTALL_SIG_HANDLER %s -o %t
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-HANDLER
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s
+
+// RUN: %clangxx -std=c++11 -DTEST_INSTALL_SIG_ACTION %s -o %t
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ACTION
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s
+
+// REQUIRES: asan-dynamic-runtime
+
+// This way of setting LD_PRELOAD does not work with Android test runner.
+// REQUIRES: not-android
+// clang-format on
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+const char *handler = nullptr;
+void SigHandler(int signum) { handler = "TestSigHandler"; }
+void SigAction(int, siginfo_t *, void *) { handler = "TestSigAction"; }
+
+struct KernelSigaction {
+  __sighandler_t handler;
+  unsigned long flags;
+  void (*restorer)();
+  char unused[1024];
+};
+
+#if defined(__x86_64__)
+extern "C" void restorer();
+asm("restorer:mov $15,%rax\nsyscall");
+#endif
+
+int InternalSigaction(int sig, KernelSigaction *act, KernelSigaction *oact) {
+  if (act) {
+#if defined(__x86_64__)
+    act->flags |= 0x04000000;
+    act->restorer = &restorer;
+#endif
+  }
+  return syscall(__NR_rt_sigaction, sig, act, oact, NSIG / 8);
+}
+
+struct KernelSigaction pre_asan = {};
+
+static void Init() {
+  int res = InternalSigaction(SIGSEGV, nullptr, &pre_asan);
+  assert(res >= 0);
+  assert(pre_asan.handler == SIG_DFL || pre_asan.handler == SIG_IGN);
+#if defined(TEST_INSTALL_SIG_HANDLER)
+  pre_asan = {};
+  pre_asan.handler = &SigHandler;
+  res = InternalSigaction(SIGSEGV, &pre_asan, nullptr);
+  assert(res >= 0);
+#elif defined(TEST_INSTALL_SIG_ACTION)
+  pre_asan = {};
+  pre_asan.flags = SA_SIGINFO | SA_NODEFER;
+  pre_asan.handler = (__sighandler_t)&SigAction;
+  res = InternalSigaction(SIGSEGV, &pre_asan, nullptr);
+  assert(res >= 0);
+#endif
+}
+
+__attribute__((section(".preinit_array"), used))
+void (*__local_test_preinit)(void) = Init;
+
+bool ExpectUserHandler() {
+#if defined(TEST_INSTALL_SIG_HANDLER) || defined(TEST_INSTALL_SIG_ACTION)
+  return !strcmp(getenv("ASAN_OPTIONS"), "handle_segv=0");
+#endif
+  return false;
+}
+
+int main(int argc, char *argv[]) {
+  KernelSigaction post_asan = {};
+  InternalSigaction(SIGSEGV, nullptr, &post_asan);
+
+  assert(post_asan.handler != SIG_DFL);
+  assert(post_asan.handler != SIG_IGN);
+  assert(ExpectUserHandler() ==
+         (post_asan.handler == pre_asan.handler));
+
+  raise(SIGSEGV);
+  printf("%s\n", handler);
+  return 1;
+}
+
+// CHECK-NOT: TestSig
+// CHECK: ASAN:DEADLYSIGNAL
+
+// CHECK-HANDLER-NOT: ASAN:DEADLYSIGNAL
+// CHECK-HANDLER: TestSigHandler
+
+// CHECK-ACTION-NOT: ASAN:DEADLYSIGNAL
+// CHECK-ACTION: TestSigAction
diff --git a/test/asan/TestCases/Linux/print_memory_profile_test.cc b/test/asan/TestCases/Linux/print_memory_profile_test.cc
index 8909cca..e7896be 100644
--- a/test/asan/TestCases/Linux/print_memory_profile_test.cc
+++ b/test/asan/TestCases/Linux/print_memory_profile_test.cc
@@ -3,8 +3,9 @@
 // REQUIRES: leak-detection
 //
 // RUN: %clangxx_asan %s -o %t
-// RUN: %run %t 100 2>&1 | FileCheck %s --check-prefix=CHECK-100
-// RUN: %run %t 50 2>&1 | FileCheck %s --check-prefix=CHECK-50
+// RUN: %run %t 100 10 2>&1 | FileCheck %s --check-prefix=CHECK-100-10
+// RUN: %run %t 100 1  2>&1 | FileCheck %s --check-prefix=CHECK-100-1
+// RUN: %run %t 50  10 2>&1 | FileCheck %s --check-prefix=CHECK-50-10
 #include <sanitizer/common_interface_defs.h>
 
 #include <stdio.h>
@@ -13,7 +14,7 @@
 char *sink[1000];
 
 int main(int argc, char **argv) {
-  if (argc < 2)
+  if (argc < 3)
     return 1;
 
   int idx = 0;
@@ -22,12 +23,17 @@
   for (int i = 0; i < 28; i++)
     sink[idx++] = new char[24000];
 
-  __sanitizer_print_memory_profile(atoi(argv[1]));
+  __sanitizer_print_memory_profile(atoi(argv[1]), atoi(argv[2]));
 }
 
-// CHECK-100: Live Heap Allocations: {{.*}}; showing top 100%
-// CHECK-100: 2227000 byte(s) ({{.*}}%) in 17 allocation(s)
-// CHECK-100: 672000 byte(s) ({{.*}}%) in 28 allocation(s)
-// CHECK-50: Live Heap Allocations: {{.*}}; showing top 50%
-// CHECK-50: 2227000 byte(s) ({{.*}}%) in 17 allocation(s)
-// CHECK-50-NOT: allocation
+// CHECK-100-10: Live Heap Allocations: {{.*}}; showing top 100% (at most 10 unique contexts)
+// CHECK-100-10: 2227000 byte(s) ({{.*}}%) in 17 allocation(s)
+// CHECK-100-10: 672000 byte(s) ({{.*}}%) in 28 allocation(s)
+
+// CHECK-100-1: Live Heap Allocations: {{.*}}; showing top 100% (at most 1 unique contexts)
+// CHECK-100-1: 2227000 byte(s) ({{.*}}%) in 17 allocation(s)
+// CHECK-100-1-NOT: allocation
+
+// CHECK-50-10: Live Heap Allocations: {{.*}}; showing top 50% (at most 10 unique contexts)
+// CHECK-50-10: 2227000 byte(s) ({{.*}}%) in 17 allocation(s)
+// CHECK-50-10-NOT: allocation
diff --git a/test/asan/TestCases/Linux/read_binary_name_regtest.c b/test/asan/TestCases/Linux/read_binary_name_regtest.c
index b09096c..4130256 100644
--- a/test/asan/TestCases/Linux/read_binary_name_regtest.c
+++ b/test/asan/TestCases/Linux/read_binary_name_regtest.c
@@ -3,6 +3,7 @@
 // This test uses seccomp-BPF to restrict the readlink() system call and makes
 // sure ASan is still able to
 // RUN: not ls /usr/include/linux/seccomp.h || ( %clang_asan %s -o %t && not %run %t 2>&1 | FileCheck %s )
+// REQUIRES: shell
 // UNSUPPORTED: android
 
 #include <errno.h>
diff --git a/test/asan/TestCases/Linux/release_to_os_test.cc b/test/asan/TestCases/Linux/release_to_os_test.cc
index 2640216..c85bcbb 100644
--- a/test/asan/TestCases/Linux/release_to_os_test.cc
+++ b/test/asan/TestCases/Linux/release_to_os_test.cc
@@ -11,6 +11,7 @@
 #include <algorithm>
 #include <stdint.h>
 #include <assert.h>
+#include <random>
 
 #include <sanitizer/asan_interface.h>
 
@@ -19,9 +20,10 @@
   const size_t kAllocSize = 100;
   const size_t kNumIter = 100;
   uintptr_t *chunks[kNumChunks] = {0};
+  std::mt19937 r;
 
   for (size_t iter = 0; iter < kNumIter; iter++) {
-    std::random_shuffle(chunks, chunks + kNumChunks);
+    std::shuffle(chunks, chunks + kNumChunks, r);
     size_t to_replace = rand() % kNumChunks;
     for (size_t i = 0; i < kNumChunks; i++) {
       if (chunks[i])
diff --git a/test/asan/TestCases/Linux/sanbox_read_proc_self_maps_test.cc b/test/asan/TestCases/Linux/sanbox_read_proc_self_maps_test.cc
new file mode 100644
index 0000000..d9099ed
--- /dev/null
+++ b/test/asan/TestCases/Linux/sanbox_read_proc_self_maps_test.cc
@@ -0,0 +1,28 @@
+// REQUIRES: x86_64-target-arch
+// RUN: %clangxx_asan  %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck %s
+#include <sanitizer/common_interface_defs.h>
+#include <sched.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+  __sanitizer_sandbox_arguments args = {0};
+  // should cache /proc/self/maps
+  __sanitizer_sandbox_on_notify(&args);
+
+  if (unshare(CLONE_NEWUSER)) {
+    printf("unshare failed\n");
+    return 1;
+  }
+
+  // remove access to /proc/self/maps
+  if (chroot("/tmp")) {
+    printf("chroot failed\n");
+    return 2;
+  }
+
+  *(volatile int*)0x42 = 0;
+// CHECK-NOT: CHECK failed
+}
diff --git a/test/asan/TestCases/Linux/swapcontext_annotation.cc b/test/asan/TestCases/Linux/swapcontext_annotation.cc
index 56e8119..44189c0 100644
--- a/test/asan/TestCases/Linux/swapcontext_annotation.cc
+++ b/test/asan/TestCases/Linux/swapcontext_annotation.cc
@@ -4,10 +4,11 @@
 // RUN: %clangxx_asan -std=c++11 -lpthread -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -std=c++11 -lpthread -O2 %s -o %t && %run %t 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -std=c++11 -lpthread -O3 %s -o %t && %run %t 2>&1 | FileCheck %s
-// RUN: %clangxx_asan -std=c++11 -lpthread -O0 %s -o %t && %run %t 2>&1 | FileCheck <( seq 60 | xargs -i -- grep LOOPCHECK %s ) --check-prefix LOOPCHECK
-// RUN: %clangxx_asan -std=c++11 -lpthread -O1 %s -o %t && %run %t 2>&1 | FileCheck <( seq 60 | xargs -i -- grep LOOPCHECK %s ) --check-prefix LOOPCHECK
-// RUN: %clangxx_asan -std=c++11 -lpthread -O2 %s -o %t && %run %t 2>&1 | FileCheck <( seq 60 | xargs -i -- grep LOOPCHECK %s ) --check-prefix LOOPCHECK
-// RUN: %clangxx_asan -std=c++11 -lpthread -O3 %s -o %t && %run %t 2>&1 | FileCheck <( seq 60 | xargs -i -- grep LOOPCHECK %s ) --check-prefix LOOPCHECK
+// RUN: seq 60 | xargs -i -- grep LOOPCHECK %s > %t.checks
+// RUN: %clangxx_asan -std=c++11 -lpthread -O0 %s -o %t && %run %t 2>&1 | FileCheck %t.checks --check-prefix LOOPCHECK
+// RUN: %clangxx_asan -std=c++11 -lpthread -O1 %s -o %t && %run %t 2>&1 | FileCheck %t.checks --check-prefix LOOPCHECK
+// RUN: %clangxx_asan -std=c++11 -lpthread -O2 %s -o %t && %run %t 2>&1 | FileCheck %t.checks --check-prefix LOOPCHECK
+// RUN: %clangxx_asan -std=c++11 -lpthread -O3 %s -o %t && %run %t 2>&1 | FileCheck %t.checks --check-prefix LOOPCHECK
 
 //
 // This test is too subtle to try on non-x86 arch for now.
diff --git a/test/asan/TestCases/Linux/textdomain.c b/test/asan/TestCases/Linux/textdomain.c
new file mode 100644
index 0000000..9e249d9
--- /dev/null
+++ b/test/asan/TestCases/Linux/textdomain.c
@@ -0,0 +1,13 @@
+// RUN: %clang_asan -O0 -g %s -o %t
+// RUN: %env_asan_opts=strict_string_checks=1 %run %t
+
+// Android NDK does not have libintl.h
+// UNSUPPORTED: android
+
+#include <stdlib.h>
+#include <libintl.h>
+
+int main() {
+  textdomain(NULL);
+  return 0;
+}
diff --git a/test/asan/TestCases/Linux/thread_local_quarantine_pthread_join.cc b/test/asan/TestCases/Linux/thread_local_quarantine_pthread_join.cc
new file mode 100644
index 0000000..8a5bb25
--- /dev/null
+++ b/test/asan/TestCases/Linux/thread_local_quarantine_pthread_join.cc
@@ -0,0 +1,56 @@
+// Test how creating and joining a lot of threads making only a few allocations
+// each affect total quarantine (and overall heap) size.
+
+// RUN: %clangxx_asan  %s -o %t
+// RUN: %env_asan_opts=thread_local_quarantine_size_kb=64:quarantine_size_mb=1:allocator_release_to_os_interval_ms=-1 %run %t 2>&1 | \
+// RUN:   FileCheck %s --allow-empty --check-prefix=CHECK-SMALL-LOCAL-CACHE-SMALL-OVERHEAD
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sanitizer/allocator_interface.h>
+
+// Thread local quarantine is merged to the global one when thread exits and
+// this scenario (a few allocations per thread) used to generate a huge overhead
+// of practically empty quarantine batches (one per thread).
+static const size_t kHeapSizeIncrementLimit = 2 << 20;
+static const int kNumThreads = 2048;
+// The allocation size is so small because all we want to test is that
+// quarantine block merging process does not leak memory used for quarantine
+// blocks.
+// TODO(alekseyshl): Add more comprehensive test verifying quarantine size
+// directly (requires quarantine stats exposed in allocator stats and API).
+static const int kAllocSize = 1;
+
+void *ThreadFn(void *unused) {
+  char *temp = new char[kAllocSize];
+  memset(temp, -1, kAllocSize);
+  delete [] (temp);
+  return NULL;
+}
+
+int main() {
+  // Warm up all internal structures.
+  pthread_t t;
+  pthread_create(&t, 0, ThreadFn, 0);
+  pthread_join(t, 0);
+
+  size_t heap_size = __sanitizer_get_heap_size();
+  fprintf(stderr, "Heap size: %zd\n", heap_size);
+
+  for (int i = 0; i < kNumThreads; i++) {
+    pthread_t t;
+    pthread_create(&t, 0, ThreadFn, 0);
+    pthread_join(t, 0);
+
+    size_t new_heap_size = __sanitizer_get_heap_size();
+  }
+
+  size_t new_heap_size = __sanitizer_get_heap_size();
+  fprintf(stderr, "New heap size: %zd\n", new_heap_size);
+  if (new_heap_size - heap_size < kHeapSizeIncrementLimit)
+    fprintf(stderr, "Heap growth is within limits\n");
+}
+
+// CHECK-SMALL-LOCAL-CACHE-SMALL-OVERHEAD: Heap growth is within limits
diff --git a/test/asan/TestCases/Linux/thread_local_quarantine_size_kb.cc b/test/asan/TestCases/Linux/thread_local_quarantine_size_kb.cc
index 24022a1..46af1a0 100644
--- a/test/asan/TestCases/Linux/thread_local_quarantine_size_kb.cc
+++ b/test/asan/TestCases/Linux/thread_local_quarantine_size_kb.cc
@@ -1,12 +1,10 @@
 // Test thread_local_quarantine_size_kb
 
 // RUN: %clangxx_asan  %s -o %t
-// RUN: %env_asan_opts=thread_local_quarantine_size_kb=256:verbosity=1 %run %t 2>&1 | \
-// RUN:   FileCheck %s --check-prefix=CHECK-VALUE
-// RUN: %env_asan_opts=thread_local_quarantine_size_kb=64:quarantine_size_mb=64 %run %t 2>&1 | \
+// RUN: %env_asan_opts=thread_local_quarantine_size_kb=64:quarantine_size_mb=64:verbosity=1 %run %t 2>&1 | \
 // RUN:   FileCheck %s --allow-empty --check-prefix=CHECK-SMALL-LOCAL-CACHE-SMALL-OVERHEAD
 // RUN: %env_asan_opts=thread_local_quarantine_size_kb=0:quarantine_size_mb=0 %run %t 2>&1 | \
-// RUN:   FileCheck %s --check-prefix=CHECK-QUARANTINE-DISABLED
+// RUN:   FileCheck %s --check-prefix=CHECK-QUARANTINE-DISABLED-SMALL-OVERHEAD
 // RUN: %env_asan_opts=thread_local_quarantine_size_kb=0:quarantine_size_mb=64 not %run %t 2>&1 | \
 // RUN:   FileCheck %s --check-prefix=CHECK-FOR-PARAMETER-ERROR
 
@@ -15,29 +13,33 @@
 #include <string.h>
 #include <sanitizer/allocator_interface.h>
 
-// The idea is allocate a lot of small blocks, totaling 5Mb of user memory
-// total, and verify that quarantine does not incur too much memory overhead.
+// The idea is allocate a lot of small blocks, totaling 5Mb of user memory,
+// and verify that quarantine does not incur too much memory overhead.
 // There's always an overhead for red zones, shadow memory and such, but
 // quarantine accounting should not significantly contribute to that.
+// The zero sized thread local cache is specifically tested since it used to
+// generate a huge overhead of almost empty quarantine batches.
+static const size_t kHeapSizeIncrementLimit = 12 << 20;
 static const int kNumAllocs = 20000;
 static const int kAllocSize = 256;
-static const size_t kHeapSizeLimit = 12 << 20;
 
 int main() {
-  size_t old_heap_size = __sanitizer_get_heap_size();
+  size_t heap_size = __sanitizer_get_heap_size();
+  fprintf(stderr, "Heap size: %zd\n", heap_size);
+
   for (int i = 0; i < kNumAllocs; i++) {
-    char *g = new char[kAllocSize];
-    memset(g, -1, kAllocSize);
-    delete [] (g);
+    char *temp = new char[kAllocSize];
+    memset(temp, -1, kAllocSize);
+    delete [] (temp);
   }
+
   size_t new_heap_size = __sanitizer_get_heap_size();
-  fprintf(stderr, "heap size: new: %zd old: %zd\n", new_heap_size,
-          old_heap_size);
-  if (new_heap_size - old_heap_size > kHeapSizeLimit)
-    fprintf(stderr, "Heap size limit exceeded");
+  fprintf(stderr, "New heap size: %zd\n", new_heap_size);
+  if (new_heap_size - heap_size < kHeapSizeIncrementLimit)
+    fprintf(stderr, "Heap growth is within limits\n");
 }
 
-// CHECK-VALUE: thread_local_quarantine_size_kb=256K
-// CHECK-SMALL-LOCAL-CACHE-SMALL-OVERHEAD-NOT: Heap size limit exceeded
-// CHECK-QUARANTINE-DISABLED-NOT: Heap size limit exceeded
+// CHECK-SMALL-LOCAL-CACHE-SMALL-OVERHEAD: thread_local_quarantine_size_kb=64K
+// CHECK-SMALL-LOCAL-CACHE-SMALL-OVERHEAD: Heap growth is within limits
+// CHECK-QUARANTINE-DISABLED-SMALL-OVERHEAD: Heap growth is within limits
 // CHECK-FOR-PARAMETER-ERROR: thread_local_quarantine_size_kb can be set to 0 only when quarantine_size_mb is set to 0
diff --git a/test/asan/TestCases/Linux/uar_signals.cc b/test/asan/TestCases/Linux/uar_signals.cc
index f42c3f6..f96a2fe 100644
--- a/test/asan/TestCases/Linux/uar_signals.cc
+++ b/test/asan/TestCases/Linux/uar_signals.cc
@@ -1,12 +1,13 @@
 // This test checks that the implementation of use-after-return
 // is async-signal-safe.
-// RUN: %clangxx_asan -O1 %s -o %t -pthread && %run %t
+// RUN: %clangxx_asan -std=c++11 -O1 %s -o %t -pthread && %run %t
 // REQUIRES: stable-runtime
 #include <signal.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <sys/time.h>
 #include <pthread.h>
+#include <initializer_list>
 
 int *g;
 int n_signals;
@@ -17,7 +18,6 @@
   int local;
   g = &local;
   n_signals++;
-  // printf("s: %p\n", &local);
 }
 
 static void EnableSigprof(Sigaction SignalHandler) {
@@ -49,22 +49,29 @@
   RecursiveFunction(depth - 1);
 }
 
-void *Thread(void *) {
-  RecursiveFunction(18);
+void *FastThread(void *) {
+  RecursiveFunction(1);
+  return NULL;
+}
+
+void *SlowThread(void *) {
+  RecursiveFunction(1);
   return NULL;
 }
 
 int main(int argc, char **argv) {
   EnableSigprof(SignalHandler);
 
-  for (int i = 0; i < 4; i++) {
-    fprintf(stderr, ".");
-    const int kNumThread = sizeof(void*) == 8 ? 16 : 8;
-    pthread_t t[kNumThread];
-    for (int i = 0; i < kNumThread; i++)
-      pthread_create(&t[i], 0, Thread, 0);
-    for (int i = 0; i < kNumThread; i++)
-      pthread_join(t[i], 0);
+  for (auto Thread : {&FastThread, &SlowThread}) {
+    for (int i = 0; i < 1000; i++) {
+      fprintf(stderr, ".");
+      const int kNumThread = sizeof(void*) == 8 ? 32 : 8;
+      pthread_t t[kNumThread];
+      for (int i = 0; i < kNumThread; i++)
+        pthread_create(&t[i], 0, Thread, 0);
+      for (int i = 0; i < kNumThread; i++)
+        pthread_join(t[i], 0);
+    }
+    fprintf(stderr, "\n");
   }
-  fprintf(stderr, "\n");
 }
diff --git a/test/asan/TestCases/Posix/allow_user_segv.cc b/test/asan/TestCases/Posix/allow_user_segv.cc
index 69c1df9..4bec6ad 100644
--- a/test/asan/TestCases/Posix/allow_user_segv.cc
+++ b/test/asan/TestCases/Posix/allow_user_segv.cc
@@ -1,8 +1,21 @@
 // Regression test for
 // https://code.google.com/p/address-sanitizer/issues/detail?id=180
 
-// RUN: %clangxx_asan -O0 %s -o %t && %env_asan_opts=allow_user_segv_handler=true not %run %t 2>&1 | FileCheck %s
-// RUN: %clangxx_asan -O2 %s -o %t && %env_asan_opts=allow_user_segv_handler=true not %run %t 2>&1 | FileCheck %s
+// clang-format off
+// RUN: %clangxx_asan -O0 %s -o %t
+
+// RUN: %env_asan_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0
+// RUN: %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1
+// RUN: %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2
+
+// RUN: %env_asan_opts=handle_segv=0:allow_user_segv_handler=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0
+// RUN: %env_asan_opts=handle_segv=1:allow_user_segv_handler=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2
+// RUN: %env_asan_opts=handle_segv=2:allow_user_segv_handler=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2
+
+// RUN: %env_asan_opts=handle_segv=0:allow_user_segv_handler=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0
+// RUN: %env_asan_opts=handle_segv=1:allow_user_segv_handler=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1
+// RUN: %env_asan_opts=handle_segv=2:allow_user_segv_handler=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2
+// clang-format on
 
 #include <signal.h>
 #include <stdio.h>
@@ -22,10 +35,14 @@
     printf("Invalid signum");
     exit(1);
   }
-  if (original_sigaction.sa_flags | SA_SIGINFO)
-    original_sigaction.sa_sigaction(signum, siginfo, context);
-  else
-    original_sigaction.sa_handler(signum);
+  if (original_sigaction.sa_flags | SA_SIGINFO) {
+    if (original_sigaction.sa_sigaction)
+      original_sigaction.sa_sigaction(signum, siginfo, context);
+  } else {
+    if (original_sigaction.sa_handler)
+      original_sigaction.sa_handler(signum);
+  }
+  exit(1);
 }
 
 int DoSEGV() {
@@ -33,27 +50,38 @@
   return *x;
 }
 
-int InstallHandler(int signum, struct sigaction *original_sigaction) {
+bool InstallHandler(int signum, struct sigaction *original_sigaction) {
   struct sigaction user_sigaction;
   user_sigaction.sa_sigaction = User_OnSIGSEGV;
   user_sigaction.sa_flags = SA_SIGINFO;
   if (sigaction(signum, &user_sigaction, original_sigaction)) {
     perror("sigaction");
-    return 1;
+    return false;
   }
-  return 0;
+  return true;
 }
 
 int main() {
   // Let's install handlers for both SIGSEGV and SIGBUS, since pre-Yosemite
   // 32-bit Darwin triggers SIGBUS instead.
-  if (InstallHandler(SIGSEGV, &original_sigaction_sigsegv)) return 1;
-  if (InstallHandler(SIGBUS, &original_sigaction_sigbus)) return 1;
-  fprintf(stderr, "User sigaction installed\n");
+  if (InstallHandler(SIGSEGV, &original_sigaction_sigsegv) &&
+      InstallHandler(SIGBUS, &original_sigaction_sigbus)) {
+    fprintf(stderr, "User sigaction installed\n");
+  }
   return DoSEGV();
 }
 
-// CHECK: User sigaction installed
-// CHECK-NEXT: User sigaction called
-// CHECK-NEXT: ASAN:DEADLYSIGNAL
-// CHECK: AddressSanitizer: SEGV on unknown address
+// CHECK0-NOT: ASAN:DEADLYSIGNAL
+// CHECK0-NOT: AddressSanitizer: SEGV on unknown address
+// CHECK0: User sigaction installed
+// CHECK0-NEXT: User sigaction called
+
+// CHECK1: User sigaction installed
+// CHECK1-NEXT: User sigaction called
+// CHECK1-NEXT: ASAN:DEADLYSIGNAL
+// CHECK1: AddressSanitizer: SEGV on unknown address
+
+// CHECK2-NOT: User sigaction called
+// CHECK2: User sigaction installed
+// CHECK2-NEXT: ASAN:DEADLYSIGNAL
+// CHECK2: AddressSanitizer: SEGV on unknown address
diff --git a/test/asan/TestCases/Posix/asan-sigbus.cpp b/test/asan/TestCases/Posix/asan-sigbus.cpp
new file mode 100644
index 0000000..c91ecbd
--- /dev/null
+++ b/test/asan/TestCases/Posix/asan-sigbus.cpp
@@ -0,0 +1,42 @@
+// Check handle_bus flag
+// Defaults to true
+// RUN: %clangxx_asan -std=c++11 %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck %s -check-prefix=CHECK-BUS
+// RUN: %env_asan_opts=handle_sigbus=0 not --crash %run %t 2>&1 | FileCheck %s
+
+// UNSUPPORTED: ios
+
+#include <assert.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <string>
+
+char array[4096];
+int main(int argc, char **argv) {
+  int fd = open((std::string(argv[0]) + ".m").c_str(), O_RDWR | O_CREAT, 0700);
+  if (fd < 0) {
+    perror("open");
+    exit(1);
+  }
+  assert(write(fd, array, sizeof(array)) == sizeof(array));
+
+  // Write some zeroes to the file, then mmap it while it has a 4KiB size
+  char *addr = (char *)mmap(nullptr, sizeof(array), PROT_READ,
+                            MAP_FILE | MAP_SHARED, fd, 0);
+  if (addr == MAP_FAILED) {
+    perror("mmap");
+    exit(1);
+  }
+
+  // Truncate the file so our memory isn't valid any more
+  assert(ftruncate(fd, 0) == 0);
+
+  // Try to access the memory
+  return addr[42];
+  // CHECK-NOT: DEADLYSIGNAL
+  // CHECK-BUS: DEADLYSIGNAL
+  // CHECK-BUS: ERROR: AddressSanitizer: BUS
+}
diff --git a/test/asan/TestCases/Posix/closed-fds.cc b/test/asan/TestCases/Posix/closed-fds.cc
index b7bca26..b2604bb 100644
--- a/test/asan/TestCases/Posix/closed-fds.cc
+++ b/test/asan/TestCases/Posix/closed-fds.cc
@@ -2,11 +2,13 @@
 // symbolizer still works.
 
 // RUN: rm -f %t.log.*
-// RUN: %clangxx_asan -O0 %s -o %t 2>&1 && %env_asan_opts=log_path='"%t.log"':verbosity=2 not %run %t 2>&1
+// RUN: %clangxx_asan -O0 %s -o %t
+// RUN: %env_asan_opts=log_path='"%t.log"':verbosity=2 not %run %t
 // RUN: FileCheck %s --check-prefix=CHECK-FILE < %t.log.*
 
 // FIXME: copy %t.log back from the device and re-enable on Android.
 // UNSUPPORTED: android
+// UNSUPPORTED: ios
 
 #include <assert.h>
 #include <stdio.h>
diff --git a/test/asan/TestCases/Posix/coverage-caller-callee.cc b/test/asan/TestCases/Posix/coverage-caller-callee.cc
deleted file mode 100644
index fb8b9bf..0000000
--- a/test/asan/TestCases/Posix/coverage-caller-callee.cc
+++ /dev/null
@@ -1,75 +0,0 @@
-// Test caller-callee coverage with large number of threads
-// and various numbers of callers and callees.
-
-// RUN: %clangxx_asan -fsanitize-coverage=edge,indirect-calls %s -o %t
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 10 1 2>&1 | FileCheck %s --check-prefix=CHECK-10-1
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 9  2 2>&1 | FileCheck %s --check-prefix=CHECK-9-2
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 7  3 2>&1 | FileCheck %s --check-prefix=CHECK-7-3
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 17 1 2>&1 | FileCheck %s --check-prefix=CHECK-17-1
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 15 2 2>&1 | FileCheck %s --check-prefix=CHECK-15-2
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 18 3 2>&1 | FileCheck %s --check-prefix=CHECK-18-3
-// RUN: rm -f caller-callee*.sancov
-//
-// REQUIRES: asan-64-bits
-// UNSUPPORTED: android
-//
-// CHECK-10-1: CovDump: 10 caller-callee pairs written
-// CHECK-9-2: CovDump: 18 caller-callee pairs written
-// CHECK-7-3: CovDump: 21 caller-callee pairs written
-// CHECK-17-1: CovDump: 14 caller-callee pairs written
-// CHECK-15-2: CovDump: 28 caller-callee pairs written
-// CHECK-18-3: CovDump: 42 caller-callee pairs written
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-int P = 0;
-struct Foo {virtual void f() {if (P) printf("Foo::f()\n");}};
-struct Foo1 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo2 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo3 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo4 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo5 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo6 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo7 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo8 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo9 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo10 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo11 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo12 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo13 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo14 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo15 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo16 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo17 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo18 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo19 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-
-Foo *foo[20] = {
-    new Foo,   new Foo1,  new Foo2,  new Foo3,  new Foo4,  new Foo5,  new Foo6,
-    new Foo7,  new Foo8,  new Foo9,  new Foo10, new Foo11, new Foo12, new Foo13,
-    new Foo14, new Foo15, new Foo16, new Foo17, new Foo18, new Foo19,
-};
-
-int n_functions = 10;
-int n_callers = 2;
-
-void *Thread(void *arg) {
-  if (n_callers >= 1) for (int i = 0; i < 2000; i++) foo[i % n_functions]->f();
-  if (n_callers >= 2) for (int i = 0; i < 2000; i++) foo[i % n_functions]->f();
-  if (n_callers >= 3) for (int i = 0; i < 2000; i++) foo[i % n_functions]->f();
-  return arg;
-}
-
-int main(int argc, char **argv) {
-  if (argc >= 2)
-    n_functions = atoi(argv[1]);
-  if (argc >= 3)
-    n_callers = atoi(argv[2]);
-  const int kNumThreads = 16;
-  pthread_t t[kNumThreads];
-  for (int i = 0; i < kNumThreads; i++)
-    pthread_create(&t[i], 0, Thread, 0);
-  for (int i = 0; i < kNumThreads; i++)
-    pthread_join(t[i], 0);
-}
diff --git a/test/asan/TestCases/Posix/coverage-direct-activation.cc b/test/asan/TestCases/Posix/coverage-direct-activation.cc
deleted file mode 100644
index 0af3296..0000000
--- a/test/asan/TestCases/Posix/coverage-direct-activation.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Test for direct coverage writing enabled at activation time.
-
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %dynamiclib -fPIC
-// RUN: %clangxx -c -DSO_DIR=\"%T\" %s -o %t.o
-// RUN: %clangxx_asan -fsanitize-coverage=func %t.o %libdl -o %t
-
-// RUN: rm -rf %T/coverage-direct-activation
-
-// RUN: mkdir -p %T/coverage-direct-activation/normal
-// RUN: %env_asan_opts=coverage=1,coverage_direct=0,coverage_dir=%T/coverage-direct-activation/normal:verbosity=1 %run %t %dynamiclib
-// RUN: %sancov print %T/coverage-direct-activation/normal/*.sancov >%T/coverage-direct-activation/normal/out.txt
-
-// RUN: mkdir -p %T/coverage-direct-activation/direct
-// RUN: %env_asan_opts=start_deactivated=1,coverage_direct=1,verbosity=1 \
-// RUN:   ASAN_ACTIVATION_OPTIONS=coverage=1,coverage_dir=%T/coverage-direct-activation/direct %run %t %dynamiclib
-// RUN: cd %T/coverage-direct-activation/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// Test start_deactivated=1,coverage=1 in ASAN_OPTIONS.
-
-// RUN: diff -u coverage-direct-activation/normal/out.txt coverage-direct-activation/direct/out.txt
-
-// RUN: mkdir -p %T/coverage-direct-activation/direct2
-// RUN: %env_asan_opts=start_deactivated=1,coverage=1,coverage_direct=1,verbosity=1 \
-// RUN:   ASAN_ACTIVATION_OPTIONS=coverage_dir=%T/coverage-direct-activation/direct2 %run %t %dynamiclib
-// RUN: cd %T/coverage-direct-activation/direct2
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// RUN: diff -u coverage-direct-activation/normal/out.txt coverage-direct-activation/direct2/out.txt
-
-// XFAIL: android
-
-#include <assert.h>
-#include <dlfcn.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#ifdef SHARED
-extern "C" {
-void bar() { printf("bar\n"); }
-}
-#else
-
-int main(int argc, char **argv) {
-  fprintf(stderr, "PID: %d\n", getpid());
-  assert(argc > 1);
-  void *handle1 = dlopen(argv[1], RTLD_LAZY);  // %dynamiclib
-  assert(handle1);
-  void (*bar1)() = (void (*)())dlsym(handle1, "bar");
-  assert(bar1);
-  bar1();
-
-  return 0;
-}
-#endif
diff --git a/test/asan/TestCases/Posix/coverage-direct-large.cc b/test/asan/TestCases/Posix/coverage-direct-large.cc
deleted file mode 100644
index 367a566..0000000
--- a/test/asan/TestCases/Posix/coverage-direct-large.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Test for direct coverage writing with lots of data.
-// Current implementation maps output file in chunks of 64K. This test overflows
-// 1 chunk.
-
-// RUN: %clangxx_asan -fsanitize-coverage=func -O0 -DSHARED %s -shared -o %dynamiclib -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func -O0 %s %libdl -o %t
-
-// RUN: rm -rf %T/coverage-direct-large
-
-// RUN: mkdir -p %T/coverage-direct-large/normal && cd %T/coverage-direct-large/normal
-// RUN: %env_asan_opts=coverage=1:coverage_direct=0:verbosity=1 %run %t %dynamiclib
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// RUN: mkdir -p %T/coverage-direct-large/direct && cd %T/coverage-direct-large/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:verbosity=1 %run %t %dynamiclib
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// RUN: diff -u coverage-direct-large/normal/out.txt coverage-direct-large/direct/out.txt
-//
-// XFAIL: android
-
-#define F0(Q, x) Q(x)
-#define F1(Q, x)                                                          \
-  F0(Q, x##0) F0(Q, x##1) F0(Q, x##2) F0(Q, x##3) F0(Q, x##4) F0(Q, x##5) \
-      F0(Q, x##6) F0(Q, x##7) F0(Q, x##8) F0(Q, x##9)
-#define F2(Q, x)                                                          \
-  F1(Q, x##0) F1(Q, x##1) F1(Q, x##2) F1(Q, x##3) F1(Q, x##4) F1(Q, x##5) \
-      F1(Q, x##6) F1(Q, x##7) F1(Q, x##8) F1(Q, x##9)
-#define F3(Q, x)                                                          \
-  F2(Q, x##0) F2(Q, x##1) F2(Q, x##2) F2(Q, x##3) F2(Q, x##4) F2(Q, x##5) \
-      F2(Q, x##6) F2(Q, x##7) F2(Q, x##8) F2(Q, x##9)
-#define F4(Q, x)                                                          \
-  F3(Q, x##0) F3(Q, x##1) F3(Q, x##2) F3(Q, x##3) F3(Q, x##4) F3(Q, x##5) \
-      F3(Q, x##6) F3(Q, x##7) F3(Q, x##8) F3(Q, x##9)
-
-#define DECL(x) __attribute__((noinline)) static void x() {}
-#define CALL(x) x();
-
-F4(DECL, f)
-
-#ifdef SHARED
-extern "C" void so_entry() {
-  F4(CALL, f)
-}  
-#else
-
-#include <assert.h>
-#include <dlfcn.h>
-#include <stdio.h>
-int main(int argc, char **argv) {
-  F4(CALL, f)
-  assert(argc > 1);
-  void *handle1 = dlopen(argv[1], RTLD_LAZY);  // %dynamiclib
-  assert(handle1);
-  void (*so_entry)() = (void (*)())dlsym(handle1, "so_entry");
-  assert(so_entry);
-  so_entry();
-
-  return 0;
-}
-
-#endif // SHARED
diff --git a/test/asan/TestCases/Posix/coverage-direct.cc b/test/asan/TestCases/Posix/coverage-direct.cc
deleted file mode 100644
index 8caa9c5..0000000
--- a/test/asan/TestCases/Posix/coverage-direct.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// Test for direct coverage writing with dlopen at coverage level 1 to 3.
-
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %dynamiclib -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func %s %libdl -o %t
-
-// RUN: rm -rf %T/coverage-direct
-
-// RUN: mkdir -p %T/coverage-direct/normal
-// RUN: %env_asan_opts=coverage=1:coverage_direct=0:coverage_dir=%T/coverage-direct/normal:verbosity=1 %run %t %dynamiclib
-// RUN: %sancov print %T/coverage-direct/normal/*.sancov >%T/coverage-direct/normal/out.txt
-
-// RUN: mkdir -p %T/coverage-direct/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%T/coverage-direct/direct:verbosity=1 %run %t %dynamiclib
-// RUN: cd %T/coverage-direct/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// RUN: diff -u coverage-direct/normal/out.txt coverage-direct/direct/out.txt
-
-
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED %s -shared -o %dynamiclib -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSO_DIR=\"%T\" %s %libdl -o %t
-
-// RUN: rm -rf %T/coverage-direct
-
-// RUN: mkdir -p %T/coverage-direct/normal
-// RUN: %env_asan_opts=coverage=1:coverage_direct=0:coverage_dir=%T/coverage-direct/normal:verbosity=1 %run %t %dynamiclib
-// RUN: %sancov print %T/coverage-direct/normal/*.sancov >%T/coverage-direct/normal/out.txt
-
-// RUN: mkdir -p %T/coverage-direct/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%T/coverage-direct/direct:verbosity=1 %run %t %dynamiclib
-// RUN: cd %T/coverage-direct/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// RUN: diff -u coverage-direct/normal/out.txt coverage-direct/direct/out.txt
-
-
-// RUN: %clangxx_asan -fsanitize-coverage=edge -DSHARED %s -shared -o %dynamiclib -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=edge -DSO_DIR=\"%T\" %s %libdl -o %t
-
-// RUN: rm -rf %T/coverage-direct
-
-// RUN: mkdir -p %T/coverage-direct/normal
-// RUN: %env_asan_opts=coverage=1:coverage_direct=0:coverage_dir=%T/coverage-direct/normal:verbosity=1 %run %t %dynamiclib
-// RUN: %sancov print %T/coverage-direct/normal/*.sancov >%T/coverage-direct/normal/out.txt
-
-// RUN: mkdir -p %T/coverage-direct/direct
-// RUN: %env_asan_opts=coverage=1:coverage_direct=1:coverage_dir=%T/coverage-direct/direct:verbosity=1 %run %t %dynamiclib
-// RUN: cd %T/coverage-direct/direct
-// RUN: %sancov rawunpack *.sancov.raw
-// RUN: %sancov print *.sancov >out.txt
-// RUN: cd ../..
-
-// RUN: diff -u coverage-direct/normal/out.txt coverage-direct/direct/out.txt
-
-// XFAIL: android
-
-#include <assert.h>
-#include <dlfcn.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#ifdef SHARED
-extern "C" {
-void bar() { printf("bar\n"); }
-}
-#else
-
-int main(int argc, char **argv) {
-  fprintf(stderr, "PID: %d\n", getpid());
-  assert(argc > 1);
-  void *handle1 = dlopen(argv[1], RTLD_LAZY);
-  assert(handle1);
-  void (*bar1)() = (void (*)())dlsym(handle1, "bar");
-  assert(bar1);
-  bar1();
-
-  return 0;
-}
-#endif
diff --git a/test/asan/TestCases/Posix/coverage-fork-direct.cc b/test/asan/TestCases/Posix/coverage-fork-direct.cc
deleted file mode 100644
index c196719..0000000
--- a/test/asan/TestCases/Posix/coverage-fork-direct.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
-// RUN: rm -rf %T/coverage-fork-direct
-// RUN: mkdir -p %T/coverage-fork-direct && cd %T/coverage-fork-direct
-// RUN: (%env_asan_opts=coverage=1:coverage_direct=1:verbosity=1 %run %t; \
-// RUN:  %sancov rawunpack *.sancov.raw; %sancov print *.sancov) 2>&1
-//
-// XFAIL: android
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-__attribute__((noinline))
-void foo() { printf("foo\n"); }
-
-__attribute__((noinline))
-void bar() { printf("bar\n"); }
-
-__attribute__((noinline))
-void baz() { printf("baz\n"); }
-
-int main(int argc, char **argv) {
-  pid_t child_pid = fork();
-  if (child_pid == 0) {
-    fprintf(stderr, "Child PID: %d\n", getpid());
-    baz();
-  } else {
-    fprintf(stderr, "Parent PID: %d\n", getpid());
-    foo();
-    bar();
-  }
-  return 0;
-}
-
-// CHECK-DAG: Child PID: [[ChildPID:[0-9]+]]
-// CHECK-DAG: Parent PID: [[ParentPID:[0-9]+]]
-// CHECK-DAG: read 3 PCs from {{.*}}.[[ParentPID]].sancov
-// CHECK-DAG: read 1 PCs from {{.*}}.[[ChildPID]].sancov
diff --git a/test/asan/TestCases/Posix/coverage-fork.cc b/test/asan/TestCases/Posix/coverage-fork.cc
index 40ce72e..da6e3c2 100644
--- a/test/asan/TestCases/Posix/coverage-fork.cc
+++ b/test/asan/TestCases/Posix/coverage-fork.cc
@@ -1,9 +1,13 @@
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s -o %t
 // RUN: rm -rf %T/coverage-fork
 // RUN: mkdir -p %T/coverage-fork && cd %T/coverage-fork
-// RUN: %env_asan_opts=coverage=1:coverage_direct=0:verbosity=1 %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s
 //
 // UNSUPPORTED: android
+//
+// Ideally a forked-subprocess should only report it's own coverage,
+// not parent's one. But trace-pc-guard currently does nothing special for fork,
+// and thus this test is relaxed.
 
 #include <stdio.h>
 #include <string.h>
@@ -32,6 +36,6 @@
 }
 
 // CHECK-DAG: Child PID: [[ChildPID:[0-9]+]]
-// CHECK-DAG: [[ChildPID]].sancov: 1 PCs written
+// CHECK-DAG: [[ChildPID]].sancov: {{.*}} PCs written
 // CHECK-DAG: Parent PID: [[ParentPID:[0-9]+]]
 // CHECK-DAG: [[ParentPID]].sancov: 3 PCs written
diff --git a/test/asan/TestCases/Posix/coverage-maybe-open-file.cc b/test/asan/TestCases/Posix/coverage-maybe-open-file.cc
deleted file mode 100644
index cab3d57..0000000
--- a/test/asan/TestCases/Posix/coverage-maybe-open-file.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316
-// XFAIL: android
-//
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
-// RUN: rm -rf %T/coverage-maybe-open-file
-// RUN: mkdir -p %T/coverage-maybe-open-file && cd %T/coverage-maybe-open-file
-// RUN: %env_asan_opts=coverage=1 %run %t | FileCheck %s --check-prefix=CHECK-success
-// RUN: %env_asan_opts=coverage=0 %run %t | FileCheck %s --check-prefix=CHECK-fail
-// RUN: [ "$(cat test.sancov.packed)" == "test" ]
-// RUN: cd .. && rm -rf %T/coverage-maybe-open-file
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sanitizer/coverage_interface.h>
-
-// FIXME: the code below might not work on Windows.
-int main(int argc, char **argv) {
-  int fd = __sanitizer_maybe_open_cov_file("test");
-  if (fd > 0) {
-    printf("SUCCESS\n");
-    const char s[] = "test\n";
-    write(fd, s, strlen(s));
-    close(fd);
-  } else {
-    printf("FAIL\n");
-  }
-}
-
-// CHECK-success: SUCCESS
-// CHECK-fail: FAIL
diff --git a/test/asan/TestCases/Posix/coverage-module-unloaded.cc b/test/asan/TestCases/Posix/coverage-module-unloaded.cc
index d492af6..322a1ba 100644
--- a/test/asan/TestCases/Posix/coverage-module-unloaded.cc
+++ b/test/asan/TestCases/Posix/coverage-module-unloaded.cc
@@ -1,15 +1,15 @@
 // Check that unloading a module doesn't break coverage dumping for remaining
 // modules.
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %dynamiclib1 -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %dynamiclib2 -fPIC
-// RUN: %clangxx_asan -fsanitize-coverage=func %s %libdl -o %t
-// RUN: mkdir -p %T/coverage-module-unloaded && cd %T/coverage-module-unloaded
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t %dynamiclib1 %dynamiclib2 2>&1        | FileCheck %s
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t %dynamiclib1 %dynamiclib2 foo 2>&1    | FileCheck %s
-// RUN: rm -r %T/coverage-module-unloaded
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib1 -fPIC
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib2 -fPIC
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %libdl -o %t.exe
+// RUN: mkdir -p %t.tmp/coverage-module-unloaded && cd %t.tmp/coverage-module-unloaded
+// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t.exe %dynamiclib1 %dynamiclib2 2>&1        | FileCheck %s
+// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t.exe %dynamiclib1 %dynamiclib2 foo 2>&1    | FileCheck %s
 //
 // https://code.google.com/p/address-sanitizer/issues/detail?id=263
 // XFAIL: android
+// UNSUPPORTED: ios
 
 #include <assert.h>
 #include <dlfcn.h>
@@ -47,8 +47,5 @@
 #endif
 
 // CHECK: PID: [[PID:[0-9]+]]
-// CHECK: [[PID]].sancov: 1 PCs written
-// CHECK: coverage-module-unloaded{{.*}}1.[[PID]]
-// CHECK: coverage-module-unloaded{{.*}}2.[[PID]]
-// Even though we've unloaded one of the libs we still dump the coverage file
-// for that lib (although the data will be inaccurate, if at all useful)
+// CHECK-DAG: exe{{.*}}[[PID]].sancov: {{.*}}PCs written
+// CHECK-DAG: dynamic{{.*}}[[PID]].sancov: {{.*}}PCs written
diff --git a/test/asan/TestCases/Posix/coverage-sandboxing.cc b/test/asan/TestCases/Posix/coverage-sandboxing.cc
deleted file mode 100644
index c4e6bc7..0000000
--- a/test/asan/TestCases/Posix/coverage-sandboxing.cc
+++ /dev/null
@@ -1,86 +0,0 @@
-// RUN: %clangxx_asan -fsanitize-coverage=bb -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t %ld_flags_rpath_exe
-
-// RUN: rm -rf %T/coverage_sandboxing_test
-// RUN: mkdir %T/coverage_sandboxing_test && cd %T/coverage_sandboxing_test
-// RUN: mkdir vanilla && cd vanilla
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1  | FileCheck %s --check-prefix=CHECK-vanilla
-// RUN: mkdir ../sandbox1 && cd ../sandbox1
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t a 2>&1 | FileCheck %s --check-prefix=CHECK-sandbox
-// RUN: %sancov unpack coverage_sandboxing_test.sancov.packed
-// RUN: mkdir ../sandbox2 && cd ../sandbox2
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t a b 2>&1 | FileCheck %s --check-prefix=CHECK-sandbox
-// RUN: %sancov unpack coverage_sandboxing_test.sancov.packed
-// RUN: cd ..
-// RUN: %sancov print vanilla/`basename %dynamiclib`*.sancov > vanilla.txt
-// RUN: %sancov print sandbox1/`basename %dynamiclib`*.sancov > sandbox1.txt
-// RUN: %sancov print sandbox2/`basename %dynamiclib`*.sancov > sandbox2.txt
-// RUN: diff vanilla.txt sandbox1.txt
-// RUN: diff vanilla.txt sandbox2.txt
-// RUN: rm -r %T/coverage_sandboxing_test
-
-// https://code.google.com/p/address-sanitizer/issues/detail?id=263
-// XFAIL: android
-
-#include <assert.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <sanitizer/coverage_interface.h>
-
-#define bb0(n)                        \
-  case n:                             \
-    fprintf(stderr, "foo: %d\n", n);  \
-    break;
-
-#define bb1(n) bb0(n) bb0(n + 1)
-#define bb2(n) bb1(n) bb1(n + 2)
-#define bb3(n) bb2(n) bb2(n + 4)
-#define bb4(n) bb3(n) bb3(n + 8)
-#define bb5(n) bb4(n) bb4(n + 16)
-#define bb6(n) bb5(n) bb5(n + 32)
-#define bb7(n) bb6(n) bb6(n + 64)
-#define bb8(n) bb7(n) bb7(n + 128)
-
-#ifdef SHARED
-void foo(int i) {
-  switch(i) {
-    // 256 basic blocks
-    bb8(0)
-  }
-}
-#else
-extern void foo(int i);
-
-int main(int argc, char **argv) {
-  assert(argc <= 3);
-  for (int i = 0; i < 256; i++) foo(i);
-  fprintf(stderr, "PID: %d\n", getpid());
-  if (argc == 1) {
-    // Vanilla mode, dump to individual files.
-    return 0;
-  }
-  // Dump to packed file.
-  int fd = creat("coverage_sandboxing_test.sancov.packed", 0660);
-  __sanitizer_sandbox_arguments args = {0};
-  args.coverage_sandboxed = 1;
-  args.coverage_fd = fd;
-  if (argc == 2)
-    // Write to packed file, do not split into blocks.
-    args.coverage_max_block_size = 0;
-  else if (argc == 3)
-    // Write to packed file, split into blocks (as if writing to a socket).
-    args.coverage_max_block_size = 100;
-  __sanitizer_sandbox_on_notify(&args);
-  return 0;
-}
-#endif
-
-// CHECK-vanilla: PID: [[PID:[0-9]+]]
-// CHECK-vanilla: .so.[[PID]].sancov: 257 PCs written
-// CHECK-vanilla: [[PID]].sancov: 1 PCs written
-
-// CHECK-sandbox: PID: [[PID:[0-9]+]]
-// CHECK-sandbox: 257 PCs written to packed file
diff --git a/test/asan/TestCases/Posix/coverage.cc b/test/asan/TestCases/Posix/coverage.cc
index 7c1c494..a78560a 100644
--- a/test/asan/TestCases/Posix/coverage.cc
+++ b/test/asan/TestCases/Posix/coverage.cc
@@ -1,16 +1,16 @@
-// RUN: %clangxx_asan -fsanitize-coverage=func -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so
-// RUN: %clangxx_asan -fsanitize-coverage=func %s %ld_flags_rpath_exe -o %t
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %ld_flags_rpath_exe -o %t
 // RUN: rm -rf %T/coverage && mkdir -p %T/coverage && cd %T/coverage
 // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1         | FileCheck %s --check-prefix=CHECK-main
-// RUN: %sancov print `ls coverage.*sancov | grep -v '.so'` 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV1
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV1
 // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t foo 2>&1     | FileCheck %s --check-prefix=CHECK-foo
-// RUN: %sancov print `ls coverage.*sancov | grep -v '.so'` 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
 // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t bar 2>&1     | FileCheck %s --check-prefix=CHECK-bar
-// RUN: %sancov print `ls *coverage.*sancov | grep -v '.so'` 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
 // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t foo bar 2>&1 | FileCheck %s --check-prefix=CHECK-foo-bar
-// RUN: %sancov print `ls *coverage.*sancov | grep -v '.so'` 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
-// RUN: %sancov print `ls *coverage.*sancov | grep '.so'` 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV1
-// RUN: %sancov merge `ls *coverage.*sancov | grep -v '.so'` > merged-cov
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
+// RUN: %sancov print libcoverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV1
+// RUN: %sancov merge coverage.*sancov > merged-cov
 // RUN: %sancov print merged-cov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
 // RUN: %env_asan_opts=coverage=1:verbosity=1 not %run %t foo bar 4    2>&1 | FileCheck %s --check-prefix=CHECK-report
 // RUN: %env_asan_opts=coverage=1:verbosity=1 not %run %t foo bar 4 5  2>&1 | FileCheck %s --check-prefix=CHECK-segv
@@ -18,8 +18,8 @@
 //
 // https://code.google.com/p/address-sanitizer/issues/detail?id=263
 // XFAIL: android
+// UNSUPPORTED: ios
 
-#include <sanitizer/coverage_interface.h>
 #include <assert.h>
 #include <stdio.h>
 #include <string.h>
@@ -37,12 +37,8 @@
 int main(int argc, char **argv) {
   fprintf(stderr, "PID: %d\n", getpid());
   for (int i = 1; i < argc; i++) {
-    if (!strcmp(argv[i], "foo")) {
-      uintptr_t old_coverage = __sanitizer_get_total_unique_coverage();
+    if (!strcmp(argv[i], "foo"))
       foo();
-      uintptr_t new_coverage = __sanitizer_get_total_unique_coverage();
-      assert(new_coverage > old_coverage);
-    }
     if (!strcmp(argv[i], "bar"))
       bar();
   }
@@ -63,12 +59,12 @@
 // CHECK-foo-NOT: .so.[[PID]]
 //
 // CHECK-bar: PID: [[PID:[0-9]+]]
-// CHECK-bar: .so.[[PID]].sancov: 1 PCs written
-// CHECK-bar: [[PID]].sancov: 1 PCs written
+// CHECK-bar-DAG: .so.[[PID]].sancov: 1 PCs written
+// CHECK-bar-DAG: [[PID]].sancov: 1 PCs written
 //
 // CHECK-foo-bar: PID: [[PID:[0-9]+]]
-// CHECK-foo-bar: so.[[PID]].sancov: 1 PCs written
-// CHECK-foo-bar: [[PID]].sancov: 2 PCs written
+// CHECK-foo-bar-DAG: so.[[PID]].sancov: 1 PCs written
+// CHECK-foo-bar-DAG: [[PID]].sancov: 2 PCs written
 //
 // CHECK-report: AddressSanitizer: global-buffer-overflow
 // CHECK-report: PCs written
diff --git a/test/asan/TestCases/Posix/deep_call_stack.cc b/test/asan/TestCases/Posix/deep_call_stack.cc
index 18ba563..2d2b056 100644
--- a/test/asan/TestCases/Posix/deep_call_stack.cc
+++ b/test/asan/TestCases/Posix/deep_call_stack.cc
@@ -1,6 +1,7 @@
 // Check that UAR mode can handle very deep recusrion.
-// RUN: %clangxx_asan -O2 %s -o %t && \
-// RUN:   (ulimit -s 4096; %env_asan_opts=detect_stack_use_after_return=1 %run %t) 2>&1 | FileCheck %s
+// RUN: %clangxx_asan -O2 %s -o %t
+// RUN: ulimit -s 4096
+// RUN: %env_asan_opts=detect_stack_use_after_return=1 %run %t 2>&1 | FileCheck %s
 
 // Also check that use_sigaltstack+verbosity doesn't crash.
 // RUN: %env_asan_opts=verbosity=1:use_sigaltstack=1:detect_stack_use_after_return=1 %run %t  | FileCheck %s
diff --git a/test/asan/TestCases/Posix/fread_fwrite.cc b/test/asan/TestCases/Posix/fread_fwrite.cc
new file mode 100644
index 0000000..c062926
--- /dev/null
+++ b/test/asan/TestCases/Posix/fread_fwrite.cc
@@ -0,0 +1,34 @@
+// RUN: %clangxx_asan -g %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-FWRITE
+// RUN: not %run %t 1 2>&1 | FileCheck %s --check-prefix=CHECK-FREAD
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int test_fread() {
+  FILE *f = fopen("/dev/zero", "r");
+  char buf[2];
+  fread(buf, sizeof(buf), 2, f); // BOOM
+  fclose(f);
+  return 0;
+}
+
+int test_fwrite() {
+  FILE *f = fopen("/dev/null", "w");
+  char buf[2];
+  fwrite(buf, sizeof(buf), 2, f); // BOOM
+  return fclose(f);
+}
+
+int main(int argc, char *argv[]) {
+  if (argc > 1)
+    test_fread();
+  else
+    test_fwrite();
+  return 0;
+}
+
+// CHECK-FREAD: {{.*ERROR: AddressSanitizer: stack-buffer-overflow}}
+// CHECK-FREAD: #{{.*}} in {{(wrap_|__interceptor_)?}}fread
+// CHECK-FWRITE: {{.*ERROR: AddressSanitizer: stack-buffer-overflow}}
+// CHECK-FWRITE: #{{.*}} in {{(wrap_|__interceptor_)?}}fwrite
diff --git a/test/asan/TestCases/Posix/glob.cc b/test/asan/TestCases/Posix/glob.cc
index e0eeb33..46d4a0d 100644
--- a/test/asan/TestCases/Posix/glob.cc
+++ b/test/asan/TestCases/Posix/glob.cc
@@ -1,5 +1,6 @@
 // FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316
 // XFAIL: android
+// UNSUPPORTED: ios
 //
 // RUN: %clangxx_asan -O0 %s -o %t && %run %t %p 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -O3 %s -o %t && %run %t %p 2>&1 | FileCheck %s
diff --git a/test/asan/TestCases/Posix/halt_on_error-torture.cc b/test/asan/TestCases/Posix/halt_on_error-torture.cc
index 5d7eff0..829568e 100644
--- a/test/asan/TestCases/Posix/halt_on_error-torture.cc
+++ b/test/asan/TestCases/Posix/halt_on_error-torture.cc
@@ -5,17 +5,17 @@
 // RUN: rm -f 1.txt
 // RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=false %run %t 1 10 >>1.txt 2>&1
 // RUN: FileCheck %s < 1.txt
-// RUN: [ $(grep -c 'ERROR: AddressSanitizer: use-after-poison' 1.txt) -eq 10 ]
+// RUN: grep 'ERROR: AddressSanitizer: use-after-poison' 1.txt | count 10
 // RUN: FileCheck --check-prefix=CHECK-NO-COLLISION %s < 1.txt
 //
 // Collisions are unlikely but still possible so we need the ||.
 // RUN: rm -f 10.txt
-// RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=false %run %t 10 20 >>10.txt 2>&1 || true
+// RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=false:exitcode=0 %run %t 10 20 2>&1 | cat > 10.txt
 // RUN: FileCheck --check-prefix=CHECK-COLLISION %s < 10.txt || FileCheck --check-prefix=CHECK-NO-COLLISION %s < 10.txt
 //
 // Collisions are unlikely but still possible so we need the ||.
 // RUN: rm -f 20.txt
-// RUN: %env_asan_opts=halt_on_error=false %run %t 10 20 >>20.txt 2>&1 || true
+// RUN: %env_asan_opts=halt_on_error=false:exitcode=0 %run %t 10 20 2>&1 | cat > 20.txt
 // RUN: FileCheck --check-prefix=CHECK-COLLISION %s < 20.txt || FileCheck --check-prefix=CHECK-NO-COLLISION %s < 20.txt
 
 #include <stdio.h>
@@ -38,7 +38,7 @@
   unsigned seed = (unsigned)(size_t)arg;
 
   volatile char tmp[2];
-  __asan_poison_memory_region(&tmp, sizeof(tmp)); 
+  __asan_poison_memory_region(&tmp, sizeof(tmp));
 
   for (size_t i = 0; i < niter; ++i) {
     random_delay(&seed);
diff --git a/test/asan/TestCases/Posix/halt_on_error_suppress_equal_pcs.cc b/test/asan/TestCases/Posix/halt_on_error_suppress_equal_pcs.cc
index 98ef851..b9d85ef 100644
--- a/test/asan/TestCases/Posix/halt_on_error_suppress_equal_pcs.cc
+++ b/test/asan/TestCases/Posix/halt_on_error_suppress_equal_pcs.cc
@@ -8,7 +8,7 @@
 // Check that we die after reaching different reports number threshold.
 // RUN: rm -f %t1.log
 // RUN: %env_asan_opts=halt_on_error=false not %run %t 1 >> %t1.log 2>&1
-// RUN: [ $(grep -c 'ERROR: AddressSanitizer: stack-buffer-overflow' %t1.log) -eq 25 ]
+// RUN: grep 'ERROR: AddressSanitizer: stack-buffer-overflow' %t1.log | count 25
 //
 // Check suppress_equal_pcs=true behavior is equal to default one.
 // RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=true %run %t 2>&1 | FileCheck %s
@@ -16,7 +16,7 @@
 // Check suppress_equal_pcs=false behavior isn't equal to default one.
 // RUN: rm -f %t2.log
 // RUN: %env_asan_opts=halt_on_error=false:suppress_equal_pcs=false %run %t >> %t2.log 2>&1
-// RUN: [ $(grep -c 'ERROR: AddressSanitizer: stack-buffer-overflow' %t2.log) -eq 30 ]
+// RUN: grep 'ERROR: AddressSanitizer: stack-buffer-overflow' %t2.log | count 30
 
 #define ACCESS_ARRAY_FIVE_ELEMENTS(array, i)     \
   array[i] = i;                                  \
diff --git a/test/asan/TestCases/Posix/stack-use-after-return.cc b/test/asan/TestCases/Posix/stack-use-after-return.cc
index 7c03037..822d5be 100644
--- a/test/asan/TestCases/Posix/stack-use-after-return.cc
+++ b/test/asan/TestCases/Posix/stack-use-after-return.cc
@@ -4,7 +4,7 @@
 // RUN: %clangxx_asan  -O3 %s -pthread -o %t && %env_asan_opts=detect_stack_use_after_return=1 not %run %t 2>&1 | FileCheck %s
 // RUN: %env_asan_opts=detect_stack_use_after_return=0 %run %t
 // Regression test for a CHECK failure with small stack size and large frame.
-// RUN: %clangxx_asan  -O3 %s -pthread -o %t -DkSize=10000 -DUseThread -DkStackSize=65536 && %env_asan_opts=detect_stack_use_after_return=1 not %run %t 2>&1 | FileCheck --check-prefix=THREAD %s
+// RUN: %clangxx_asan  -O3 %s -pthread -o %t -DkSize=10000 -DUseThread -DkStackSize=131072 && %env_asan_opts=detect_stack_use_after_return=1 not %run %t 2>&1 | FileCheck --check-prefix=THREAD %s
 //
 // Test that we can find UAR in a thread other than main:
 // RUN: %clangxx_asan  -DUseThread -O2 %s -pthread -o %t && %env_asan_opts=detect_stack_use_after_return=1 not %run %t 2>&1 | FileCheck --check-prefix=THREAD %s
@@ -14,8 +14,13 @@
 // RUN: %env_asan_opts=detect_stack_use_after_return=1:max_uar_stack_size_log=20:verbosity=1 not %run %t 2>&1 | FileCheck --check-prefix=CHECK-20 %s
 // RUN: %env_asan_opts=detect_stack_use_after_return=1:min_uar_stack_size_log=24:max_uar_stack_size_log=24:verbosity=1 not %run %t 2>&1 | FileCheck --check-prefix=CHECK-24 %s
 
-#include <stdio.h>
+// This test runs out of stack on AArch64.
+// UNSUPPORTED: aarch64
+
+#include <limits.h>
 #include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
 
 #ifndef kSize
 # define kSize 1
@@ -66,8 +71,31 @@
 #if UseThread
   pthread_attr_t attr;
   pthread_attr_init(&attr);
-  if (kStackSize > 0)
-    pthread_attr_setstacksize(&attr, kStackSize);
+  if (kStackSize > 0) {
+    size_t desired_stack_size = kStackSize;
+    if (desired_stack_size < PTHREAD_STACK_MIN) {
+      desired_stack_size = PTHREAD_STACK_MIN;
+    }
+
+    int ret = pthread_attr_setstacksize(&attr, desired_stack_size);
+    if (ret != 0) {
+      fprintf(stderr, "pthread_attr_setstacksize returned %d\n", ret);
+      abort();
+    }
+    
+    size_t stacksize_check;
+    ret = pthread_attr_getstacksize(&attr, &stacksize_check);
+    if (ret != 0) {
+      fprintf(stderr, "pthread_attr_getstacksize returned %d\n", ret);
+      abort();
+    }
+
+    if (stacksize_check != desired_stack_size) {
+      fprintf(stderr, "Unable to set stack size to %d, the stack size is %d.\n",
+              desired_stack_size, stacksize_check);
+      abort(); 
+    }
+  }
   pthread_t t;
   pthread_create(&t, &attr, Thread, 0);
   pthread_attr_destroy(&attr);
diff --git a/test/asan/TestCases/Posix/start-deactivated.cc b/test/asan/TestCases/Posix/start-deactivated.cc
index b223f04..2870ffb 100644
--- a/test/asan/TestCases/Posix/start-deactivated.cc
+++ b/test/asan/TestCases/Posix/start-deactivated.cc
@@ -19,6 +19,9 @@
 // RUN:   ASAN_ACTIVATION_OPTIONS=help=1,handle_segv=0,verbosity=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-UNSUPPORTED
 
 // XFAIL: arm-linux-gnueabi
+// UNSUPPORTED: ios
+
+// END.
 
 #if !defined(SHARED_LIB)
 
diff --git a/test/asan/TestCases/Posix/strchr.c b/test/asan/TestCases/Posix/strchr.c
new file mode 100644
index 0000000..7086e13
--- /dev/null
+++ b/test/asan/TestCases/Posix/strchr.c
@@ -0,0 +1,34 @@
+// Test strchr for strict_string_checks=false does not look beyond necessary
+// char.
+// RUN: %clang_asan %s -o %t
+// RUN: %env_asan_opts=strict_string_checks=false %run %t 2>&1
+// RUN: %env_asan_opts=strict_string_checks=true not %run %t 2>&1 | FileCheck %s
+
+#include <assert.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+int main(int argc, char **argv) {
+  size_t page_size = sysconf(_SC_PAGE_SIZE);
+  size_t size = 2 * page_size;
+  char *s = (char *)mmap(0, size, PROT_READ | PROT_WRITE,
+                         MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  assert(s);
+  assert(((uintptr_t)s & (page_size - 1)) == 0);
+  memset(s, 'o', size);
+  s[size - 1] = 0;
+
+  char *p = s + page_size - 1;
+  *p = 'x';
+
+  if (mprotect(p + 1, 1, PROT_NONE))
+    return 1;
+  char *r = strchr(s, 'x');
+  // CHECK: AddressSanitizer: {{SEGV|BUS}} on unknown address
+  assert(r == p);
+
+  return 0;
+}
diff --git a/test/asan/TestCases/Posix/strndup_oob_test.cc b/test/asan/TestCases/Posix/strndup_oob_test.cc
new file mode 100644
index 0000000..7ea0b7a
--- /dev/null
+++ b/test/asan/TestCases/Posix/strndup_oob_test.cc
@@ -0,0 +1,27 @@
+// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s
+
+// When built as C on Linux, strndup is transformed to __strndup.
+// RUN: %clangxx_asan -O3 -xc %s -o %t && not %run %t 2>&1 | FileCheck %s
+
+// Unwind problem on arm: "main" is missing from the allocation stack trace.
+// UNSUPPORTED: win32,s390,armv7l-unknown-linux-gnueabihf
+
+#include <string.h>
+
+char kString[] = "foo";
+
+int main(int argc, char **argv) {
+  char *copy = strndup(kString, 2);
+  int x = copy[2 + argc];  // BOOM
+  // CHECK: AddressSanitizer: heap-buffer-overflow
+  // CHECK: #0 {{.*}}main {{.*}}strndup_oob_test.cc:[[@LINE-2]]
+  // CHECK-LABEL: allocated by thread T{{.*}} here:
+  // CHECK: #{{[01]}} {{.*}}strndup
+  // CHECK: #{{.*}}main {{.*}}strndup_oob_test.cc:[[@LINE-6]]
+  // CHECK-LABEL: SUMMARY
+  // CHECK: strndup_oob_test.cc:[[@LINE-7]]
+  return x;
+}
diff --git a/test/asan/TestCases/Posix/strndup_oob_test2.cc b/test/asan/TestCases/Posix/strndup_oob_test2.cc
new file mode 100644
index 0000000..0a1afe2
--- /dev/null
+++ b/test/asan/TestCases/Posix/strndup_oob_test2.cc
@@ -0,0 +1,22 @@
+// RUN: %clang_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s

+// RUN: %clang_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s

+// RUN: %clang_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s

+// RUN: %clang_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s

+

+// When built as C on Linux, strndup is transformed to __strndup.

+// RUN: %clang_asan -O3 -xc %s -o %t && not %run %t 2>&1 | FileCheck %s

+

+// Unwind problem on arm: "main" is missing from the allocation stack trace.

+// UNSUPPORTED: win32,s390,armv7l-unknown-linux-gnueabihf

+

+#include <string.h>

+

+char kChars[] = { 'f', 'o', 'o' };

+

+int main(int argc, char **argv) {

+  char *copy = strndup(kChars, 3);

+  copy = strndup(kChars, 10);

+  // CHECK: AddressSanitizer: global-buffer-overflow

+  // CHECK: {{.*}}main {{.*}}.cc:[[@LINE-2]]

+  return *copy;

+}
\ No newline at end of file
diff --git a/test/asan/TestCases/Posix/wait.cc b/test/asan/TestCases/Posix/wait.cc
index ed6f326..85e8193 100644
--- a/test/asan/TestCases/Posix/wait.cc
+++ b/test/asan/TestCases/Posix/wait.cc
@@ -4,6 +4,7 @@
 // RUN: %clangxx_asan -DWAITPID -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -DWAITPID -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s
 
+// UNSUPPORTED: darwin
 
 #include <assert.h>
 #include <sys/wait.h>
diff --git a/test/asan/TestCases/Posix/wait3.cc b/test/asan/TestCases/Posix/wait3.cc
index 2da816f..081a73e 100644
--- a/test/asan/TestCases/Posix/wait3.cc
+++ b/test/asan/TestCases/Posix/wait3.cc
@@ -4,7 +4,7 @@
 // RUN: %clangxx_asan -DWAIT3_RUSAGE -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -DWAIT3_RUSAGE -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s
 
-// UNSUPPORTED: android
+// UNSUPPORTED: android,darwin
 
 #include <assert.h>
 #include <sys/wait.h>
diff --git a/test/asan/TestCases/Posix/wait4.cc b/test/asan/TestCases/Posix/wait4.cc
index b95246e..aee5570 100644
--- a/test/asan/TestCases/Posix/wait4.cc
+++ b/test/asan/TestCases/Posix/wait4.cc
@@ -5,6 +5,7 @@
 // RUN: %clangxx_asan -DWAIT4_RUSAGE -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s
 
 // XFAIL: android
+// UNSUPPORTED: darwin
 
 #include <assert.h>
 #include <sys/wait.h>
diff --git a/test/asan/TestCases/Posix/waitid.cc b/test/asan/TestCases/Posix/waitid.cc
index 8b516dc..20fb0c6 100644
--- a/test/asan/TestCases/Posix/waitid.cc
+++ b/test/asan/TestCases/Posix/waitid.cc
@@ -1,6 +1,8 @@
 // RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
 // RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s
 
+// UNSUPPORTED: darwin
+
 #include <assert.h>
 #include <sys/wait.h>
 #include <unistd.h>
diff --git a/test/asan/TestCases/Windows/coverage-dll-stdio.cc b/test/asan/TestCases/Windows/coverage-dll-stdio.cc
index 5e12e38..92cd0a7 100644
--- a/test/asan/TestCases/Windows/coverage-dll-stdio.cc
+++ b/test/asan/TestCases/Windows/coverage-dll-stdio.cc
@@ -2,8 +2,8 @@
 // __local_stdio_printf_options function isn't instrumented for coverage.
 
 // RUN: rm -rf %t && mkdir %t && cd %t
-// RUN: %clang_cl_asan -fsanitize-coverage=func -O0 %p/dll_host.cc -Fet.exe
-// RUN: %clang_cl_asan -fsanitize-coverage=func -LD -O0 %s -Fet.dll
+// RUN: %clang_cl_asan -fsanitize-coverage=func,trace-pc-guard -O0 %p/dll_host.cc -Fet.exe
+// RUN: %clang_cl_asan -fsanitize-coverage=func,trace-pc-guard -LD -O0 %s -Fet.dll
 // RUN: %run ./t.exe t.dll 2>&1 | FileCheck %s
 
 #include <stdio.h>
diff --git a/test/asan/TestCases/Windows/dll_global_dead_strip.c b/test/asan/TestCases/Windows/dll_global_dead_strip.c
index 2664f5b..15cfd5a 100644
--- a/test/asan/TestCases/Windows/dll_global_dead_strip.c
+++ b/test/asan/TestCases/Windows/dll_global_dead_strip.c
@@ -1,8 +1,8 @@
 // RUN: %clang_cl_asan -O0 %p/dll_host.cc -Fe%t
 //
-// RUN: %clang_cl_asan -LD -O0 %s -Fe%t.dll
+// RUN: %clang_cl_asan /Gw -LD -O0 %s -Fe%t.dll
 // RUN: %env_asan_opts=report_globals=2 %run %t %t.dll 2>&1 | FileCheck %s --check-prefix=NOSTRIP
-// RUN: %clang_cl_asan -LD -O2 %s -Fe%t.dll -link -opt:ref
+// RUN: %clang_cl_asan /Gw -LD -O2 %s -Fe%t.dll -link -opt:ref
 // RUN: %env_asan_opts=report_globals=2 %run %t %t.dll 2>&1 | FileCheck %s --check-prefix=STRIP
 
 #include <stdio.h>
diff --git a/test/asan/TestCases/Windows/dll_heap_allocation.cc b/test/asan/TestCases/Windows/dll_heap_allocation.cc
new file mode 100644
index 0000000..b4df9d4
--- /dev/null
+++ b/test/asan/TestCases/Windows/dll_heap_allocation.cc
@@ -0,0 +1,30 @@
+
+// RUN: %clang_cl -LD %s -Fe%t.dll -DHEAP_LIBRARY -MD
+// RUN: %clang_cl %s %t.lib -Fe%t -fsanitize=address -MT
+// RUN: %run %t 2>&1 | FileCheck %s
+
+// Check that ASan does not fail when releasing allocations that occurred within
+// an uninstrumented DLL.
+
+#ifdef HEAP_LIBRARY
+#include <memory>
+#include <windows.h>
+
+std::unique_ptr<int> __declspec(dllexport) myglobal(new int(42));
+BOOL WINAPI DllMain(PVOID h, DWORD reason, PVOID reserved) {
+  return TRUE;
+}
+
+#else
+
+#include <memory>
+extern std::unique_ptr<int> __declspec(dllimport) myglobal;
+int main(int argc, char **argv) {
+  printf("myglobal: %d\n", *myglobal);
+  return 0;
+}
+
+#endif
+
+// CHECK: myglobal: 42
+// CHECK-NOT: ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed
diff --git a/test/asan/TestCases/Windows/dll_host.cc b/test/asan/TestCases/Windows/dll_host.cc
index 6a029c9..512f930 100644
--- a/test/asan/TestCases/Windows/dll_host.cc
+++ b/test/asan/TestCases/Windows/dll_host.cc
@@ -7,18 +7,23 @@
 // Get the list of ASan wrappers exported by the main module RTL:
 // note: The mangling decoration (i.e. @4 )is removed because calling convention
 //       differ from 32-bit and 64-bit.
-// RUN: dumpbin /EXPORTS %t | grep -o "__asan_wrap[^ ]*" | sed -e s/@.*// > %t.exported_wrappers1
-// FIXME: we should really check the other __asan exports too.
-// RUN: dumpbin /EXPORTS %t | grep -o "__sanitizer_[^ ]*" | sed -e s/@.*// > %t.exported_wrappers2
+// RUN: dumpbin /EXPORTS %t | grep -o "__asan_wrap[^ ]*" | sed -e s/@.*// > %t.exports1
+//
+// The exception handlers differ in 32-bit and 64-bit, so we ignore them:
+// RUN: grep '[E]XPORT:' %s | sed -e 's/.*[E]XPORT: //' > %t.exports2
+// EXPORT: __asan_wrap__except_handler3
+// EXPORT: __asan_wrap__except_handler4
+// EXPORT: __asan_wrap___C_specific_handler
 //
 // Get the list of ASan wrappers imported by the DLL RTL:
 // [BEWARE: be really careful with the sed commands, as this test can be run
 //  from different environemnts with different shells and seds]
-// RUN: grep INTERCEPT_LIBRARY_FUNCTION %p/../../../../lib/asan/asan_win_dll_thunk.cc | grep -v define | sed -e s/.*(/__asan_wrap_/ | sed -e s/).*// > %t.dll_imports1
-// RUN: grep "^INTERFACE_FUNCTION.*sanitizer" %p/../../../../lib/asan/asan_win_dll_thunk.cc | grep -v define | sed -e s/.*(// | sed -e s/).*// > %t.dll_imports2
+// RUN: grep INTERCEPT_LIBRARY_FUNCTION %p/../../../../lib/asan/asan_win_dll_thunk.cc \
+// RUN:  | grep -v define | sed -e s/.*(/__asan_wrap_/ -e s/).*//              \
+// RUN:  > %t.imports1
 //
 // Add functions interecepted in asan_malloc.win.cc and asan_win.cc.
-// RUN: grep '[I]MPORT:' %s | sed -e 's/.*[I]MPORT: //' > %t.dll_imports3
+// RUN: grep '[I]MPORT:' %s | sed -e 's/.*[I]MPORT: //' > %t.imports2
 // IMPORT: __asan_wrap_HeapAlloc
 // IMPORT: __asan_wrap_HeapFree
 // IMPORT: __asan_wrap_HeapReAlloc
@@ -26,20 +31,15 @@
 // IMPORT: __asan_wrap_CreateThread
 // IMPORT: __asan_wrap_RaiseException
 // IMPORT: __asan_wrap_RtlRaiseException
+// IMPORT: __asan_wrap_SetUnhandledExceptionFilter
 //
-// The exception handlers differ in 32-bit and 64-bit, so we ignore them:
-// RUN: grep '[E]XPORT:' %s | sed -e 's/.*[E]XPORT: //' > %t.exported_wrappers3
-// EXPORT: __asan_wrap__except_handler3
-// EXPORT: __asan_wrap__except_handler4
-// EXPORT: __asan_wrap___C_specific_handler
-//
-// RUN: cat %t.dll_imports1 %t.dll_imports2 %t.dll_imports3 | sort | uniq > %t.dll_imports-sorted
-// RUN: cat %t.exported_wrappers1 %t.exported_wrappers2 %t.exported_wrappers3 | sort | uniq > %t.exported_wrappers-sorted
+// RUN: cat %t.imports1 %t.imports2 | sort | uniq > %t.imports-sorted
+// RUN: cat %t.exports1 %t.exports2 | sort | uniq > %t.exports-sorted
 //
 // Now make sure the DLL thunk imports everything:
 // RUN: echo
 // RUN: echo "=== NOTE === If you see a mismatch below, please update asan_win_dll_thunk.cc"
-// RUN: diff %t.dll_imports-sorted %t.exported_wrappers-sorted
+// RUN: diff %t.imports-sorted %t.exports-sorted
 // REQUIRES: asan-static-runtime
 
 #include <stdio.h>
diff --git a/test/asan/TestCases/Windows/fuse-lld.cc b/test/asan/TestCases/Windows/fuse-lld.cc
index 76c36d8..c20e5ff 100644
--- a/test/asan/TestCases/Windows/fuse-lld.cc
+++ b/test/asan/TestCases/Windows/fuse-lld.cc
@@ -1,12 +1,12 @@
 // If we have LLD, see that things more or less work.
 //
-// REQUIRES: lld
+// REQUIRES: lld-available
 //
 // FIXME: Use -fuse-ld=lld after the old COFF linker is removed.
 // FIXME: Test will fail until we add flags for requesting dwarf or cv.
 // RUNX: %clangxx_asan -O2 %s -o %t.exe -fuse-ld=lld -Wl,-debug
-// RUN: %clangxx_asan -c -O2 %s -o %t.o -gdwarf
-// RUN: lld-link %t.o -out:%t.exe -debug -defaultlib:libcmt %asan_lib %asan_cxx_lib
+// RUN: %clangxx_asan -c -O2 %s -o %t.o -g -gdwarf
+// RUN: lld-link %t.o -out:%t.exe -debug -nopdb -defaultlib:libcmt %asan_lib %asan_cxx_lib
 // RUN: not %run %t.exe 2>&1 | FileCheck %s
 
 #include <stdlib.h>
diff --git a/test/asan/TestCases/Windows/global_dead_strip.c b/test/asan/TestCases/Windows/global_dead_strip.c
index e685490..2121392 100644
--- a/test/asan/TestCases/Windows/global_dead_strip.c
+++ b/test/asan/TestCases/Windows/global_dead_strip.c
@@ -1,6 +1,6 @@
-// RUN: %clang_cl_asan /O0 %s /Fe%t.exe
+// RUN: %clang_cl_asan /Gw /O0 %s /Fe%t.exe
 // RUN: %env_asan_opts=report_globals=2 %t.exe 2>&1 | FileCheck %s --check-prefix=NOSTRIP
-// RUN: %clang_cl_asan /O2 %s /Fe%t.exe -link -opt:ref
+// RUN: %clang_cl_asan /Gw /O2 %s /Fe%t.exe -link -opt:ref
 // RUN: %env_asan_opts=report_globals=2 %t.exe 2>&1 | FileCheck %s --check-prefix=STRIP
 
 #include <stdio.h>
diff --git a/test/asan/TestCases/Windows/interface_symbols_windows.c b/test/asan/TestCases/Windows/interface_symbols_windows.c
new file mode 100644
index 0000000..a08f358
--- /dev/null
+++ b/test/asan/TestCases/Windows/interface_symbols_windows.c
@@ -0,0 +1,51 @@
+// Check that the interface exported by asan static lib matches the list of
+// functions mentioned in sanitizer_interface.inc.
+//
+// Just make sure we can compile this.
+// RUN: %clang_cl_asan -O0 %s -Fe%t
+//
+// note: The mangling decoration (i.e. @4 )is removed because calling convention
+//       differ from 32-bit and 64-bit.
+//
+// RUN: dumpbin /EXPORTS %t | sed "s/=.*//"                                    \
+// RUN:   | grep -o "\(__asan_\|__ubsan_\|__sanitizer_\|__sancov_\)[^ ]*"      \
+// RUN:   | grep -v "__asan_wrap"                                              \
+// RUN:   | sed -e s/@.*// > %t.exports
+//
+// [BEWARE: be really careful with the sed commands, as this test can be run
+//  from different environemnts with different shells and seds]
+//
+// RUN: grep -e "INTERFACE_FUNCTION"                                           \
+// RUN:  %p/../../../../lib/asan/asan_interface.inc                            \
+// RUN:  %p/../../../../lib/ubsan/ubsan_interface.inc                          \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_common_interface.inc    \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_coverage_interface.inc  \
+// RUN:  | sed -e "s/.*(//" -e "s/).*//" > %t.imports1
+//
+// RUN: grep -e "INTERFACE_WEAK_FUNCTION"                                      \
+// RUN:  %p/../../../../lib/asan/asan_interface.inc                            \
+// RUN:  %p/../../../../lib/ubsan/ubsan_interface.inc                          \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_common_interface.inc    \
+// RUN:  %p/../../../../lib/sanitizer_common/sanitizer_coverage_interface.inc  \
+// RUN:  | sed -e "s/.*(//" -e "s/).*/__dll/" > %t.imports2
+//
+// Add functions not included in the interface lists:
+// RUN: grep '[I]MPORT:' %s | sed -e 's/.*[I]MPORT: //' > %t.imports3
+// IMPORT: __asan_shadow_memory_dynamic_address
+// IMPORT: __asan_get_shadow_memory_dynamic_address
+// IMPORT: __asan_option_detect_stack_use_after_return
+// IMPORT: __asan_should_detect_stack_use_after_return
+// IMPORT: __asan_set_seh_filter
+// IMPORT: __asan_unhandled_exception_filter
+// IMPORT: __asan_test_only_reported_buggy_pointer
+//
+// RUN: cat %t.imports1 %t.imports2 %t.imports3 | sort | uniq > %t.imports-sorted
+// RUN: cat %t.exports | sort | uniq > %t.exports-sorted
+//
+// Now make sure the DLL thunk imports everything:
+// RUN: echo
+// RUN: echo "=== NOTE === If you see a mismatch below, please update interface.inc files."
+// RUN: diff %t.imports-sorted %t.exports-sorted
+// REQUIRES: asan-static-runtime
+
+int main() { return 0; }
diff --git a/test/asan/TestCases/Windows/oom.cc b/test/asan/TestCases/Windows/oom.cc
index 59cc7ed..71a9c2a 100644
--- a/test/asan/TestCases/Windows/oom.cc
+++ b/test/asan/TestCases/Windows/oom.cc
@@ -8,5 +8,5 @@
   while (true) {
     void *ptr = malloc(200 * 1024 * 1024);  // 200MB
   }
-// CHECK: failed to allocate
+// CHECK: allocator is terminating the process instead of returning 0
 }
diff --git a/test/asan/TestCases/Windows/tls_init.cc b/test/asan/TestCases/Windows/tls_init.cc
index c29c4a3..a8569f8 100644
--- a/test/asan/TestCases/Windows/tls_init.cc
+++ b/test/asan/TestCases/Windows/tls_init.cc
@@ -1,4 +1,4 @@
-// RUN: %clang_cl_asan %s -Fe%t.exe
+// RUN: %clang_cl_asan %s -Fe%t.exe /MD
 // RUN: %run %t.exe | FileCheck %s
 
 // CHECK: my_thread_callback
diff --git a/test/asan/TestCases/allocator_returns_null.cc b/test/asan/TestCases/allocator_returns_null.cc
index cdfcd90..8ce002f 100644
--- a/test/asan/TestCases/allocator_returns_null.cc
+++ b/test/asan/TestCases/allocator_returns_null.cc
@@ -1,68 +1,102 @@
-// Test the behavior of malloc/calloc/realloc when the allocation size is huge.
+// Test the behavior of malloc/calloc/realloc/new when the allocation size is
+// more than ASan allocator's max allowed one.
 // By default (allocator_may_return_null=0) the process should crash.
-// With allocator_may_return_null=1 the allocator should return 0.
+// With allocator_may_return_null=1 the allocator should return 0, except the
+// operator new(), which should crash anyway (operator new(std::nothrow) should
+// return nullptr, indeed).
 //
 // RUN: %clangxx_asan -O0 %s -o %t
 // RUN: not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
-// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
-// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mNULL
-// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 | FileCheck %s --check-prefix=CHECK-cCRASH
-// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t calloc 2>&1 | FileCheck %s --check-prefix=CHECK-cNULL
-// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 | FileCheck %s --check-prefix=CHECK-coCRASH
-// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t calloc-overflow 2>&1 | FileCheck %s --check-prefix=CHECK-coNULL
-// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t realloc 2>&1 | FileCheck %s --check-prefix=CHECK-rCRASH
-// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t realloc 2>&1 | FileCheck %s --check-prefix=CHECK-rNULL
-// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mrCRASH
-// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mrNULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mNULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cNULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coNULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rNULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrNULL
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=0 not %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnCRASH
+// RUN: %env_asan_opts=allocator_may_return_null=1     %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnNULL
 
-#include <limits.h>
+// UNSUPPORTED: win32
+
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdio.h>
-#include <assert.h>
 #include <limits>
+#include <new>
+
 int main(int argc, char **argv) {
   // Disable stderr buffering. Needed on Windows.
   setvbuf(stderr, NULL, _IONBF, 0);
 
-  volatile size_t size = std::numeric_limits<size_t>::max() - 10000;
   assert(argc == 2);
-  void *x = 0;
-  if (!strcmp(argv[1], "malloc")) {
-    fprintf(stderr, "malloc:\n");
-    x = malloc(size);
-  }
-  if (!strcmp(argv[1], "calloc")) {
-    fprintf(stderr, "calloc:\n");
-    x = calloc(size / 4, 4);
-  }
+  const char *action = argv[1];
+  fprintf(stderr, "%s:\n", action);
 
-  if (!strcmp(argv[1], "calloc-overflow")) {
-    fprintf(stderr, "calloc-overflow:\n");
+  static const size_t kMaxAllowedMallocSizePlusOne =
+#if __LP64__ || defined(_WIN64)
+      (1ULL << 40) + 1;
+#else
+      (3UL << 30) + 1;
+#endif
+
+  void *x = 0;
+  if (!strcmp(action, "malloc")) {
+    x = malloc(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "calloc")) {
+    x = calloc((kMaxAllowedMallocSizePlusOne / 4) + 1, 4);
+  } else if (!strcmp(action, "calloc-overflow")) {
     volatile size_t kMaxSizeT = std::numeric_limits<size_t>::max();
     size_t kArraySize = 4096;
     volatile size_t kArraySize2 = kMaxSizeT / kArraySize + 10;
     x = calloc(kArraySize, kArraySize2);
-  }
-
-  if (!strcmp(argv[1], "realloc")) {
-    fprintf(stderr, "realloc:\n");
-    x = realloc(0, size);
-  }
-  if (!strcmp(argv[1], "realloc-after-malloc")) {
-    fprintf(stderr, "realloc-after-malloc:\n");
+  } else if (!strcmp(action, "realloc")) {
+    x = realloc(0, kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "realloc-after-malloc")) {
     char *t = (char*)malloc(100);
     *t = 42;
-    x = realloc(t, size);
+    x = realloc(t, kMaxAllowedMallocSizePlusOne);
     assert(*t == 42);
     free(t);
+  } else if (!strcmp(action, "new")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "new-nothrow")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne, std::nothrow);
+  } else {
+    assert(0);
   }
+
+  fprintf(stderr, "errno: %d\n", errno);
+
   // The NULL pointer is printed differently on different systems, while (long)0
   // is always the same.
   fprintf(stderr, "x: %lx\n", (long)x);
   free(x);
+
   return x != 0;
 }
+
 // CHECK-mCRASH: malloc:
 // CHECK-mCRASH: AddressSanitizer's allocator is terminating the process
 // CHECK-cCRASH: calloc:
@@ -73,14 +107,25 @@
 // CHECK-rCRASH: AddressSanitizer's allocator is terminating the process
 // CHECK-mrCRASH: realloc-after-malloc:
 // CHECK-mrCRASH: AddressSanitizer's allocator is terminating the process
+// CHECK-nCRASH: new:
+// CHECK-nCRASH: AddressSanitizer's allocator is terminating the process
+// CHECK-nnCRASH: new-nothrow:
+// CHECK-nnCRASH: AddressSanitizer's allocator is terminating the process
 
 // CHECK-mNULL: malloc:
+// CHECK-mNULL: errno: 12
 // CHECK-mNULL: x: 0
 // CHECK-cNULL: calloc:
+// CHECK-cNULL: errno: 12
 // CHECK-cNULL: x: 0
 // CHECK-coNULL: calloc-overflow:
+// CHECK-coNULL: errno: 12
 // CHECK-coNULL: x: 0
 // CHECK-rNULL: realloc:
+// CHECK-rNULL: errno: 12
 // CHECK-rNULL: x: 0
 // CHECK-mrNULL: realloc-after-malloc:
+// CHECK-mrNULL: errno: 12
 // CHECK-mrNULL: x: 0
+// CHECK-nnNULL: new-nothrow:
+// CHECK-nnNULL: x: 0
diff --git a/test/asan/TestCases/coverage-and-lsan.cc b/test/asan/TestCases/coverage-and-lsan.cc
index 081f493..591b4e9 100644
--- a/test/asan/TestCases/coverage-and-lsan.cc
+++ b/test/asan/TestCases/coverage-and-lsan.cc
@@ -1,6 +1,6 @@
 // Make sure coverage is dumped even if there are reported leaks.
 //
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
+// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s -o %t
 //
 // RUN: rm -rf %T/coverage-and-lsan
 //
@@ -17,4 +17,4 @@
 }
 
 // CHECK: LeakSanitizer: detected memory leaks
-// CHECK: CovDump:
+// CHECK: SanitizerCoverage: {{.*}}PCs written
diff --git a/test/asan/TestCases/coverage-caller-callee-total-count.cc b/test/asan/TestCases/coverage-caller-callee-total-count.cc
deleted file mode 100644
index 955ffe5..0000000
--- a/test/asan/TestCases/coverage-caller-callee-total-count.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Test __sanitizer_get_total_unique_coverage for caller-callee coverage
-
-// RUN: %clangxx_asan -fsanitize-coverage=edge,indirect-calls %s -o %t
-// RUN: %env_asan_opts=coverage=1 %run %t
-// RUN: rm -f caller-callee*.sancov
-//
-// REQUIRES: asan-64-bits
-
-#include <sanitizer/coverage_interface.h>
-#include <stdio.h>
-#include <assert.h>
-int P = 0;
-struct Foo {virtual void f() {if (P) printf("Foo::f()\n");}};
-struct Foo1 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-struct Foo2 : Foo {virtual void f() {if (P) printf("%d\n", __LINE__);}};
-
-Foo *foo[3] = {new Foo, new Foo1, new Foo2};
-
-uintptr_t CheckNewTotalUniqueCoverageIsLargerAndReturnIt(uintptr_t old_total) {
-  uintptr_t new_total = __sanitizer_get_total_unique_caller_callee_pairs();
-  fprintf(stderr, "Caller-Callee: old %zd new %zd\n", old_total, new_total);
-  assert(new_total > old_total);
-  return new_total;
-}
-
-int main(int argc, char **argv) {
-  uintptr_t total = __sanitizer_get_total_unique_caller_callee_pairs();
-  foo[0]->f();
-  total = CheckNewTotalUniqueCoverageIsLargerAndReturnIt(total);
-  foo[1]->f();
-  total = CheckNewTotalUniqueCoverageIsLargerAndReturnIt(total);
-  foo[2]->f();
-  total = CheckNewTotalUniqueCoverageIsLargerAndReturnIt(total);
-  // Ok, called every function once.
-  // Now call them again from another call site. Should get new coverage.
-  foo[0]->f();
-  total = CheckNewTotalUniqueCoverageIsLargerAndReturnIt(total);
-  foo[1]->f();
-  total = CheckNewTotalUniqueCoverageIsLargerAndReturnIt(total);
-  foo[2]->f();
-  total = CheckNewTotalUniqueCoverageIsLargerAndReturnIt(total);
-}
diff --git a/test/asan/TestCases/coverage-disabled.cc b/test/asan/TestCases/coverage-disabled.cc
index 490f2b2..b225035 100644
--- a/test/asan/TestCases/coverage-disabled.cc
+++ b/test/asan/TestCases/coverage-disabled.cc
@@ -8,11 +8,6 @@
 // RUN: %env_asan_opts=coverage_direct=0:coverage_dir='"%T/coverage-disabled/normal"':verbosity=1 %run %t
 // RUN: not %sancov print %T/coverage-disabled/normal/*.sancov 2>&1
 //
-// RUN: mkdir -p %T/coverage-disabled/direct
-// RUN: %env_asan_opts=coverage_direct=1:coverage_dir='"%T/coverage-disabled/direct"':verbosity=1 %run %t
-// RUN: cd %T/coverage-disabled/direct
-// RUN: not %sancov rawunpack *.sancov
-//
 // UNSUPPORTED: android
 
 int main(int argc, char **argv) {
diff --git a/test/asan/TestCases/coverage-levels.cc b/test/asan/TestCases/coverage-levels.cc
deleted file mode 100644
index 83f7cf6..0000000
--- a/test/asan/TestCases/coverage-levels.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Test various levels of coverage
-//
-// RUN: %clangxx_asan -O1 -fsanitize-coverage=func  %s -o %t
-// RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1
-// RUN: %clangxx_asan -O1 -fsanitize-coverage=bb  %s -o %t
-// RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2
-// RUN: %clangxx_asan -O1 -fsanitize-coverage=edge  %s -o %t
-// RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3
-// RUN: %clangxx_asan -O1 -fsanitize-coverage=edge -mllvm -sanitizer-coverage-block-threshold=0 %s -o %t
-// RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3
-// RUN: %clangxx_asan -O1 -fsanitize-coverage=edge,8bit-counters %s -o %t
-// RUN: %env_asan_opts=coverage=1:coverage_counters=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK_COUNTERS
-
-// RUN: %env_asan_opts=coverage=1:coverage_bitset=0:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3_NOBITSET
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3_NOBITSET
-// RUN: %env_asan_opts=coverage=1:coverage_pcs=0:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3_NOPCS
-//
-// REQUIRES: asan-64-bits
-// UNSUPPORTED: android
-volatile int sink;
-int main(int argc, char **argv) {
-  if (argc == 0)
-    sink = 0;
-}
-
-// CHECK1: CovDump: bitset of 1 bits written for '{{.*}}', 1 bits are set
-// CHECK1:  1 PCs written
-// CHECK2: CovDump: bitset of 2 bits written for '{{.*}}', 1 bits are set
-// CHECK2:  1 PCs written
-// CHECK3: CovDump: bitset of 3 bits written for '{{.*}}', 2 bits are set
-// CHECK3:  2 PCs written
-// CHECK3_NOBITSET-NOT: bitset of
-// CHECK3_NOPCS-NOT: PCs written
-// CHECK_COUNTERS: CovDump: 3 counters written for
diff --git a/test/asan/TestCases/coverage-order-pcs.cc b/test/asan/TestCases/coverage-order-pcs.cc
deleted file mode 100644
index e81c910..0000000
--- a/test/asan/TestCases/coverage-order-pcs.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Test coverage_order_pcs=1 flag which orders the PCs by their appearance.
-// RUN: DIR=%T/coverage-order-pcs
-// RUN: rm -rf $DIR
-// RUN: mkdir $DIR
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
-// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t
-// RUN: mv $DIR/*sancov $DIR/A
-
-// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t 1
-// RUN: mv $DIR/*sancov $DIR/B
-
-// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t
-// RUN: mv $DIR/*sancov $DIR/C
-
-// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t 1
-// RUN: mv $DIR/*sancov $DIR/D
-//
-// RUN: (%sancov print $DIR/A; %sancov print $DIR/B; %sancov print $DIR/C; %sancov print $DIR/D) | FileCheck %s
-//
-// RUN: rm -rf $DIR
-// Ordering works only in 64-bit mode for now.
-// REQUIRES: asan-64-bits, shell
-// UNSUPPORTED: android
-#include <stdio.h>
-
-void foo() { fprintf(stderr, "FOO\n"); }
-void bar() { fprintf(stderr, "BAR\n"); }
-
-int main(int argc, char **argv) {
-  if (argc == 2) {
-    foo();
-    bar();
-  } else {
-    bar();
-    foo();
-  }
-}
-
-// Run A: no ordering
-// CHECK: [[FOO:0x[0-9a-f]*]]
-// CHECK-NEXT: [[BAR:0x[0-9a-f]*]]
-// CHECK-NEXT: [[MAIN:0x[0-9a-f]*]]
-//
-// Run B: still no ordering
-// CHECK-NEXT: [[FOO]]
-// CHECK-NEXT: [[BAR]]
-// CHECK-NEXT: [[MAIN]]
-//
-// Run C: MAIN, BAR, FOO
-// CHECK-NEXT: [[MAIN]]
-// CHECK-NEXT: [[BAR]]
-// CHECK-NEXT: [[FOO]]
-//
-// Run D: MAIN, FOO, BAR
-// CHECK-NEXT: [[MAIN]]
-// CHECK-NEXT: [[FOO]]
-// CHECK-NEXT: [[BAR]]
diff --git a/test/asan/TestCases/coverage-reset.cc b/test/asan/TestCases/coverage-reset.cc
deleted file mode 100644
index 11c5ef6..0000000
--- a/test/asan/TestCases/coverage-reset.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-// Test __sanitizer_reset_coverage().
-
-// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
-// RUN: %env_asan_opts=coverage=1 %run %t
-
-// https://github.com/google/sanitizers/issues/618
-// UNSUPPORTED: android
-
-#include <sanitizer/coverage_interface.h>
-#include <stdio.h>
-#include <assert.h>
-static volatile int sink;
-__attribute__((noinline)) void bar() { sink = 2; }
-__attribute__((noinline)) void foo() { sink = 1; }
-
-// In MSVC 2015, printf is an inline function, which causes this test to fail as
-// it introduces an extra coverage point. Define away printf on that platform to
-// avoid the issue.
-#if _MSC_VER >= 1900
-# define printf(arg, ...)
-#endif
-
-#define GET_AND_PRINT_COVERAGE()                                       \
-  bitset = 0;                                                  \
-  for (size_t i = 0; i < n_guards; i++)                        \
-    if (guards[i]) bitset |= 1U << i;                          \
-  printf("line %d: bitset %zd total: %zd\n", __LINE__, bitset, \
-         __sanitizer_get_total_unique_coverage());
-
-#define IS_POWER_OF_TWO(a) ((a & ((a) - 1)) == 0)
-
-int main() {
-  size_t *guards = 0;
-  size_t bitset;
-  size_t n_guards = __sanitizer_get_coverage_guards(&guards);
-
-  GET_AND_PRINT_COVERAGE();
-  size_t main_bit = bitset;
-  assert(IS_POWER_OF_TWO(main_bit));
-
-  foo();
-  GET_AND_PRINT_COVERAGE();
-  size_t foo_bit = bitset & ~main_bit;
-  assert(IS_POWER_OF_TWO(foo_bit));
-
-  bar();
-  GET_AND_PRINT_COVERAGE();
-  size_t bar_bit = bitset & ~(main_bit | foo_bit);
-  assert(IS_POWER_OF_TWO(bar_bit));
-
-  __sanitizer_reset_coverage();
-  assert(__sanitizer_get_total_unique_coverage() == 0);
-  GET_AND_PRINT_COVERAGE();
-  assert(bitset == 0);
-
-  foo();
-  GET_AND_PRINT_COVERAGE();
-  assert(bitset == foo_bit);
-
-  bar();
-  GET_AND_PRINT_COVERAGE();
-  assert(bitset == (foo_bit | bar_bit));
-}
diff --git a/test/asan/TestCases/coverage-tracing.cc b/test/asan/TestCases/coverage-tracing.cc
deleted file mode 100644
index 278cfb1..0000000
--- a/test/asan/TestCases/coverage-tracing.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Test -fsanitize-coverage=trace-bb
-//
-// RUN: %clangxx_asan -O1 -fsanitize-coverage=func,trace-bb %s -o %t
-// RUN: rm -rf   %T/coverage-tracing
-// RUN: mkdir %T/coverage-tracing
-// RUN: cd %T/coverage-tracing
-// RUN:  A=x;   %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK1; mv trace-points.*.sancov $A.points
-// RUN:  A=f;   %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK2; mv trace-points.*.sancov $A.points
-// RUN:  A=b;   %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK2; mv trace-points.*.sancov $A.points
-// RUN:  A=bf;  %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK3; mv trace-points.*.sancov $A.points
-// RUN:  A=fb;  %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK3; mv trace-points.*.sancov $A.points
-// RUN:  A=ffb; %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK4; mv trace-points.*.sancov $A.points
-// RUN:  A=fff; %env_asan_opts=coverage=1:verbosity=1 %run %t $A 1   2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK4; mv trace-points.*.sancov $A.points
-// RUN:  A=bbf; %env_asan_opts=coverage=1:verbosity=1 %run %t $A 100 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK301; mv trace-points.*.sancov $A.points
-// RUN: diff f.points fff.points
-// RUN: diff bf.points fb.points
-// RUN: diff bf.points ffb.points
-// RUN: diff bf.points bbf.points
-// RUN: not diff x.points f.points
-// RUN: not diff x.points b.points
-// RUN: not diff x.points bf.points
-// RUN: not diff f.points b.points
-// RUN: not diff f.points bf.points
-// RUN: not diff b.points bf.points
-// RUN: rm -rf   %T/coverage-tracing
-//
-// REQUIRES: asan-64-bits, shell
-// UNSUPPORTED: android
-
-#include <stdlib.h>
-volatile int sink;
-__attribute__((noinline)) void foo() { sink++; }
-__attribute__((noinline)) void bar() { sink++; }
-
-int main(int argc, char **argv) {
-  if (argc != 3) return 0;
-  int n = strtol(argv[2], 0, 10);
-  while (n-- > 0) {
-    for (int i = 0; argv[1][i]; i++) {
-      if (argv[1][i] == 'f') foo();
-      else if (argv[1][i] == 'b') bar();
-    }
-  }
-}
-
-// CHECK: CovDump: Trace: 3 PCs written
-// CHECK1: CovDump: Trace: 1 Events written
-// CHECK2: CovDump: Trace: 2 Events written
-// CHECK3: CovDump: Trace: 3 Events written
-// CHECK4: CovDump: Trace: 4 Events written
-// CHECK301: CovDump: Trace: 301 Events written
diff --git a/test/asan/TestCases/default_blacklist.cc b/test/asan/TestCases/default_blacklist.cc
index 9358cc4..84c0438 100644
--- a/test/asan/TestCases/default_blacklist.cc
+++ b/test/asan/TestCases/default_blacklist.cc
@@ -1,5 +1,6 @@
 // FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316
 // XFAIL: android
+// UNSUPPORTED: ios
 //
 // Test that ASan uses the default blacklist from resource directory.
 // RUN: %clangxx_asan -### %s 2>&1 | FileCheck %s
diff --git a/test/asan/TestCases/initialization-bug.cc b/test/asan/TestCases/initialization-bug.cc
index b28174f..6ecc6c8 100644
--- a/test/asan/TestCases/initialization-bug.cc
+++ b/test/asan/TestCases/initialization-bug.cc
@@ -10,6 +10,7 @@
 
 // The test is expected to fail on OS X Yosemite and older
 // UNSUPPORTED: osx-no-ld64-live_support
+// UNSUPPORTED: ios
 
 #include <cstdio>
 
diff --git a/test/asan/TestCases/invalid-pointer-pairs.cc b/test/asan/TestCases/invalid-pointer-pairs.cc
index b36e6cd..e1df151 100644
--- a/test/asan/TestCases/invalid-pointer-pairs.cc
+++ b/test/asan/TestCases/invalid-pointer-pairs.cc
@@ -13,10 +13,10 @@
   // [[PTR1:0x[0-9a-f]+]] [[PTR2:0x[0-9a-f]+]]
   switch (c) {
   case 'g':
-    // CMP: #{{[0-9]+ .*}} in f({{char, char\*, char\*|char,char \*,char \*}}) {{.*}}invalid-pointer-pairs.cc:[[@LINE+1]]:14
+    // CMP: #{{[0-9]+ .*}} in f({{char, char\*, char\*|char,char \*,char \*}}) {{.*}}invalid-pointer-pairs.cc:[[@LINE+1]]
     return p > q;
   case 's':
-    // SUB: #{{[0-9]+ .*}} in f({{char, char\*, char\*|char,char \*,char \*}}) {{.*}}invalid-pointer-pairs.cc:[[@LINE+1]]:14
+    // SUB: #{{[0-9]+ .*}} in f({{char, char\*, char\*|char,char \*,char \*}}) {{.*}}invalid-pointer-pairs.cc:[[@LINE+1]]
     return p - q;
   case 'k': {
     // OK-NOT: ERROR
@@ -26,7 +26,7 @@
   case 'f': {
     char *p3 = p + 20;
     free(p);
-    // FREE: #{{[0-9]+ .*}} in f({{char, char\*, char\*|char,char \*,char \*}}) {{.*}}invalid-pointer-pairs.cc:[[@LINE+2]]:14
+    // FREE: #{{[0-9]+ .*}} in f({{char, char\*, char\*|char,char \*,char \*}}) {{.*}}invalid-pointer-pairs.cc:[[@LINE+2]]
     // FREE: freed by thread
     return p < p3;
   }
diff --git a/test/asan/TestCases/log-path_test.cc b/test/asan/TestCases/log-path_test.cc
index b4218ad..710d220 100644
--- a/test/asan/TestCases/log-path_test.cc
+++ b/test/asan/TestCases/log-path_test.cc
@@ -1,5 +1,6 @@
 // FIXME: https://code.google.com/p/address-sanitizer/issues/detail?id=316
 // XFAIL: android
+// UNSUPPORTED: ios
 //
 // The for loop in the backticks below requires bash.
 // REQUIRES: shell
diff --git a/test/asan/TestCases/malloc-no-intercept.c b/test/asan/TestCases/malloc-no-intercept.c
index 563f2ab..c1442e6 100644
--- a/test/asan/TestCases/malloc-no-intercept.c
+++ b/test/asan/TestCases/malloc-no-intercept.c
@@ -7,6 +7,9 @@
 // RUN: not %clang_asan -Dtestfunc=pvalloc  %s -o %t
 // RUN: not %clang_asan -Dtestfunc=cfree    %s -o %t
 
+// Conflicts with BIONIC declarations.
+// UNSUPPORTED: android
+
 #include <stdlib.h>
 
 // For glibc, cause link failures by referencing a nonexistent function.
diff --git a/test/asan/TestCases/non-executable-pc.cpp b/test/asan/TestCases/non-executable-pc.cpp
new file mode 100644
index 0000000..f8adee6
--- /dev/null
+++ b/test/asan/TestCases/non-executable-pc.cpp
@@ -0,0 +1,33 @@
+// RUN: %clangxx_asan %s -o %t
+// RUN: not %run %t 0 2>&1 | FileCheck %s
+// RUN: not %run %t n 2>&1 | FileCheck %s -check-prefix=CHECK -check-prefix=NON_EXEC
+
+// Only Linux and FreeBSD list every memory region in MemoryMappingLayout, for now.
+// REQUIRES: linux || freebsd
+
+#include <assert.h>
+
+typedef void void_f();
+int main(int argc, char **argv) {
+  char *array = new char[42];
+  void_f *func;
+  assert(argc > 1);
+  if (argv[1][0] == '0') {
+    func = (void_f *)0x04;
+  } else {
+    assert(argv[1][0] == 'n');
+    func = (void_f *)array;
+  }
+
+  func();
+  // x86 reports the SEGV with both address=X and pc=X.
+  // On PowerPC64 ELFv1, the pointer is taken to be a function-descriptor
+  // pointer out of which three 64-bit quantities are read. This will SEGV, but
+  // the compiler is free to choose the order. As a result, the address is
+  // either X, X+0x8 or X+0x10. The pc is still in main() because it has not
+  // actually made the call when the faulting access occurs.
+  // CHECK: DEADLYSIGNAL
+  // CHECK: {{AddressSanitizer: (SEGV|access-violation).*(address|pc) }}
+  // NON_EXEC: PC is at a non-executable region. Maybe a wild jump?
+  return 0;
+}
diff --git a/test/asan/TestCases/pr33372.cc b/test/asan/TestCases/pr33372.cc
new file mode 100644
index 0000000..a4b606e
--- /dev/null
+++ b/test/asan/TestCases/pr33372.cc
@@ -0,0 +1,39 @@
+// RUN: %clangxx_asan -O0 -std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_asan -O1 -std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_asan -O2 -std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s
+
+// Test that we do not detect false buffer overflows cased by optimization when
+// when local variable replaced by a smaller global constant.
+// https://bugs.llvm.org/show_bug.cgi?id=33372
+
+#include <stdio.h>
+#include <string.h>
+
+struct A { int x, y, z; };
+struct B { A a; /*gap*/ long b; };
+B *bb;
+
+void test1() {
+  A a1 = {1, 1, 2};
+  B b1 = {a1, 6};
+  bb = new B(b1);
+}
+
+const char KKK[] = {1, 1, 2};
+char bbb[100000];
+
+void test2() {
+  char cc[sizeof(bbb)];
+  memcpy(cc, KKK , sizeof(KKK));
+  memcpy(bbb, cc, sizeof(bbb));
+}
+
+int main(int argc, char *argv[]) {
+  test1();
+  test2();
+  printf("PASSED");
+  return 0;
+}
+
+// CHECK-NOT: ERROR: AddressSanitizer
+// CHECK: PASSED
diff --git a/test/asan/TestCases/realloc.cc b/test/asan/TestCases/realloc.cc
new file mode 100644
index 0000000..fcf383b
--- /dev/null
+++ b/test/asan/TestCases/realloc.cc
@@ -0,0 +1,21 @@
+// RUN: %clangxx_asan -O0 %s -o %t
+// Default is true (free on realloc to 0 size)
+// RUN: %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=allocator_frees_and_returns_null_on_realloc_zero=true %run %t 2>&1 | FileCheck %s
+// RUN: %env_asan_opts=allocator_frees_and_returns_null_on_realloc_zero=false %run %t 2>&1 | FileCheck %s --check-prefix=NO-FREE
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+  void *p = malloc(42);
+  p = realloc(p, 0);
+  if (p) {
+    // NO-FREE: Allocated something on realloc(p, 0)
+    fprintf(stderr, "Allocated something on realloc(p, 0)\n");
+  } else {
+    // CHECK: realloc(p, 0) returned nullptr
+    fprintf(stderr, "realloc(p, 0) returned nullptr\n");
+  }
+  free(p);
+}
diff --git a/test/asan/TestCases/small_memcpy_test.cc b/test/asan/TestCases/small_memcpy_test.cc
new file mode 100644
index 0000000..2d6dea6
--- /dev/null
+++ b/test/asan/TestCases/small_memcpy_test.cc
@@ -0,0 +1,28 @@
+// Test that small memcpy works correctly.
+
+// RUN: %clangxx_asan %s -o %t
+// RUN: not %run %t 8 24 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: not %run %t 16 32 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: not %run %t 24 40 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: not %run %t 32 48 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: not %run %t 40 56 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: not %run %t 48 64 2>&1 | FileCheck %s --check-prefix=CHECK
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <sanitizer/asan_interface.h>
+
+int main(int argc, char **argv) {
+  assert(argc == 3);
+  size_t poison_from = atoi(argv[1]);
+  size_t poison_to = atoi(argv[2]);
+  assert(poison_from <= poison_to);
+  char A1[64], A2[64];
+  fprintf(stderr, "%zd %zd\n", poison_from, poison_to - poison_from);
+  __asan_poison_memory_region(&A1[0] + poison_from, poison_to - poison_from);
+  memcpy(A1, A2, sizeof(A1));
+// CHECK: AddressSanitizer: use-after-poison
+  return 0;
+}
diff --git a/test/asan/TestCases/strtok.c b/test/asan/TestCases/strtok.c
new file mode 100644
index 0000000..c7b2617
--- /dev/null
+++ b/test/asan/TestCases/strtok.c
@@ -0,0 +1,103 @@
+// RUN: %clang_asan %s -o %t
+
+// Test overflows with strict_string_checks
+
+// RUN: %env_asan_opts=strict_string_checks=true not %run %t test1 2>&1 | \
+// RUN:    FileCheck %s --check-prefix=CHECK1
+// RUN: %env_asan_opts=intercept_strtok=false %run %t test1 2>&1
+// RUN: %env_asan_opts=strict_string_checks=true not %run %t test2 2>&1 | \
+// RUN:    FileCheck %s --check-prefix=CHECK2
+// RUN: %env_asan_opts=intercept_strtok=false %run %t test2 2>&1
+// RUN: %env_asan_opts=strict_string_checks=true not %run %t test3 2>&1 | \
+// RUN:    FileCheck %s --check-prefix=CHECK3
+// RUN: %env_asan_opts=intercept_strtok=false %run %t test3 2>&1
+// RUN: %env_asan_opts=strict_string_checks=true %run %t test4 2>&1
+// RUN: %env_asan_opts=intercept_strtok=false %run %t test4 2>&1
+
+// Test overflows with !strict_string_checks
+// RUN: %env_asan_opts=strict_string_checks=false not %run %t test5 2>&1 | \
+// RUN:    FileCheck %s --check-prefix=CHECK5
+// RUN: %env_asan_opts=intercept_strtok=false %run %t test5 2>&1
+// RUN: %env_asan_opts=strict_string_checks=false not %run %t test6 2>&1 | \
+// RUN:    FileCheck %s --check-prefix=CHECK6
+// RUN: %env_asan_opts=intercept_strtok=false %run %t test6 2>&1
+
+
+#include <assert.h>
+#include <string.h>
+#include <sanitizer/asan_interface.h>
+
+// Check that we find overflows in the delimiters on the first call
+// with strict_string_checks.
+void test1() {
+  char *token;
+  char s[4] = "abc";
+  char token_delimiter[2] = "b";
+  __asan_poison_memory_region ((char *)&token_delimiter[1], 2);
+  token = strtok(s, token_delimiter);
+  // CHECK1: 'token_delimiter'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable
+}
+
+// Check that we find overflows in the delimiters on the second call (str == NULL)
+// with strict_string_checks.
+void test2() {
+  char *token;
+  char s[4] = "abc";
+  char token_delimiter[2] = "b";
+  token = strtok(s, token_delimiter);
+  assert(strcmp(token, "a") == 0);
+  __asan_poison_memory_region ((char *)&token_delimiter[1], 2);
+  token = strtok(NULL, token_delimiter);
+  // CHECK2: 'token_delimiter'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable
+}
+
+// Check that we find overflows in the string (only on the first call) with strict_string_checks.
+void test3() {
+  char *token;
+  char s[4] = "abc";
+  char token_delimiter[2] = "b";
+  __asan_poison_memory_region ((char *)&s[3], 2);
+  token = strtok(s, token_delimiter);
+  // CHECK3: 's'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable
+}
+
+// Check that we do not crash when strtok returns NULL with strict_string_checks.
+void test4() {
+  char *token;
+  char s[] = "";
+  char token_delimiter[] = "a";
+  token = strtok(s, token_delimiter);
+  assert(token == NULL);
+}
+
+// Check that we find overflows in the string (only on the first call) with !strict_string_checks.
+void test5() {
+  char *token;
+  char s[4] = "abc";
+  char token_delimiter[2] = "d";
+  __asan_poison_memory_region ((char *)&s[2], 2);
+  __asan_poison_memory_region ((char *)&token_delimiter[1], 2);
+  token = strtok(s, token_delimiter);
+  // CHECK5: 's'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable
+}
+
+// Check that we find overflows in the delimiters (only on the first call) with !strict_string_checks.
+void test6() {
+  char *token;
+  char s[4] = "abc";
+  char token_delimiter[1] = {'d'};
+  __asan_poison_memory_region ((char *)&token_delimiter[1], 2);
+  token = strtok(s, &token_delimiter[1]);
+  // CHECK6: 'token_delimiter'{{.*}} <== Memory access at offset {{[0-9]+}} overflows this variable
+}
+
+int main(int argc, char **argv) {
+  if (argc != 2) return 1;
+  if (!strcmp(argv[1], "test1")) test1();
+  if (!strcmp(argv[1], "test2")) test2();
+  if (!strcmp(argv[1], "test3")) test3();
+  if (!strcmp(argv[1], "test4")) test4();
+  if (!strcmp(argv[1], "test5")) test5();
+  if (!strcmp(argv[1], "test6")) test6();
+  return 0;
+}
diff --git a/test/asan/TestCases/suppressions-exec-relative-location.cc b/test/asan/TestCases/suppressions-exec-relative-location.cc
index 740cece..d4e214d 100644
--- a/test/asan/TestCases/suppressions-exec-relative-location.cc
+++ b/test/asan/TestCases/suppressions-exec-relative-location.cc
@@ -25,6 +25,7 @@
 
 // XFAIL: android
 // XFAIL: win32
+// UNSUPPORTED: ios
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/asan/TestCases/suppressions-function.cc b/test/asan/TestCases/suppressions-function.cc
index d5ac9f7..c7f1ebe 100644
--- a/test/asan/TestCases/suppressions-function.cc
+++ b/test/asan/TestCases/suppressions-function.cc
@@ -8,6 +8,7 @@
 
 // FIXME: Windows symbolizer needs work to make this pass.
 // XFAIL: android,win32
+// UNSUPPORTED: ios
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/asan/TestCases/throw_call_test.cc b/test/asan/TestCases/throw_call_test.cc
index 5a8204a..20a7c0b 100644
--- a/test/asan/TestCases/throw_call_test.cc
+++ b/test/asan/TestCases/throw_call_test.cc
@@ -1,9 +1,6 @@
 // RUN: %clangxx_asan %s -o %t && %run %t
 // http://code.google.com/p/address-sanitizer/issues/detail?id=147 (not fixed).
 // BROKEN: %clangxx_asan %s -o %t -static-libstdc++ && %run %t
-//
-// Android builds with static libstdc++ by default.
-// XFAIL: android
 
 #include <stdio.h>
 static volatile int zero = 0;
diff --git a/test/asan/TestCases/verbose-log-path_test.cc b/test/asan/TestCases/verbose-log-path_test.cc
index 47a5c22..a63c584 100644
--- a/test/asan/TestCases/verbose-log-path_test.cc
+++ b/test/asan/TestCases/verbose-log-path_test.cc
@@ -10,6 +10,7 @@
 
 // FIXME: only FreeBSD and Linux have verbose log paths now.
 // XFAIL: win32,android
+// UNSUPPORTED: ios
 
 #include <stdlib.h>
 #include <string.h>
diff --git a/test/asan/android_commands/android_common.py b/test/asan/android_commands/android_common.py
index 1a295b7..41994bb 100644
--- a/test/asan/android_commands/android_common.py
+++ b/test/asan/android_commands/android_common.py
@@ -37,8 +37,5 @@
     return text
 
 def push_to_device(path):
-    # Workaround for https://code.google.com/p/android/issues/detail?id=65857
     dst_path = os.path.join(ANDROID_TMPDIR, os.path.basename(path))
-    tmp_path = dst_path + '.push'
-    adb(['push', path, tmp_path], 5)
-    adb(['shell', 'cp "%s" "%s" 2>&1' % (tmp_path, dst_path)], 5)
+    adb(['push', path, dst_path], 5)
diff --git a/test/asan/android_commands/android_run.py b/test/asan/android_commands/android_run.py
index f4ea52b..7e59945 100755
--- a/test/asan/android_commands/android_run.py
+++ b/test/asan/android_commands/android_run.py
@@ -18,15 +18,14 @@
     return ' '.join(args)
 
 is_64bit = (subprocess.check_output(['file', sys.argv[0] + '.real']).find('64-bit') != -1)
-asanwrapper = "" if is_64bit else "asanwrapper "
 
 device_env = build_env()
 device_args = ' '.join(sys.argv[1:]) # FIXME: escape?
 device_stdout = device_binary + '.stdout'
 device_stderr = device_binary + '.stderr'
 device_exitcode = device_binary + '.exitcode'
-ret = adb(['shell', 'cd %s && %s %s%s %s >%s 2>%s ; echo $? >%s' %
-           (ANDROID_TMPDIR, device_env, asanwrapper, device_binary, device_args,
+ret = adb(['shell', 'cd %s && %s %s %s >%s 2>%s ; echo $? >%s' %
+           (ANDROID_TMPDIR, device_env, device_binary, device_args,
             device_stdout, device_stderr, device_exitcode)])
 if ret != 0:
     sys.exit(ret)
diff --git a/test/asan/lit.cfg b/test/asan/lit.cfg
index 5ebe414..e25dd29 100644
--- a/test/asan/lit.cfg
+++ b/test/asan/lit.cfg
@@ -2,6 +2,7 @@
 
 import os
 import platform
+import re
 
 import lit.formats
 
@@ -37,6 +38,11 @@
   # Also, make sure we do not overwhelm the syslog while testing.
   default_asan_opts = 'abort_on_error=0'
   default_asan_opts += ':log_to_syslog=0'
+
+  # On Darwin, leak checking is not enabled by default. Enable for x86_64
+  # tests to prevent regressions
+  if config.target_arch == 'x86_64':
+    default_asan_opts += ':detect_leaks=1'
 elif config.android:
   # The same as on Darwin, we default to "abort_on_error=1" which slows down
   # testing. Also, all existing tests are using "not" instead of "not --crash"
@@ -107,14 +113,13 @@
 asan_lit_source_dir = get_required_attr(config, "asan_lit_source_dir")
 if config.android == "1":
   config.available_features.add('android')
-  clang_wrapper = os.path.join(asan_lit_source_dir,
-                               "android_commands", "android_compile.py") + " "
+  compile_wrapper = os.path.join(asan_lit_source_dir, "android_commands", "android_compile.py") + " "
+  config.compile_wrapper = compile_wrapper
 else:
   config.available_features.add('not-android')
-  clang_wrapper = ""
 
 def build_invocation(compile_flags):
-  return " " + " ".join([clang_wrapper, config.clang] + compile_flags) + " "
+  return " " + " ".join([config.compile_wrapper, config.clang] + compile_flags) + " "
 
 # Clang driver link 'x86' (i686) architecture to 'i386'.
 target_arch = config.target_arch
@@ -132,16 +137,22 @@
 
 # Windows-specific tests might also use the clang-cl.exe driver.
 if platform.system() == 'Windows':
-  clang_cl_asan_cxxflags = ["-fsanitize=address",
-                            "-Wno-deprecated-declarations",
-                            "-WX",
-                            "-D_HAS_EXCEPTIONS=0",
-                            "-Zi"] + target_cflags
+  clang_cl_cxxflags = ["-Wno-deprecated-declarations",
+                       "-WX",
+                       "-D_HAS_EXCEPTIONS=0",
+                       "-Zi"] + target_cflags
+  clang_cl_asan_cxxflags = ["-fsanitize=address"] + clang_cl_cxxflags
   if config.asan_dynamic:
     clang_cl_asan_cxxflags.append("-MD")
-  clang_invocation = build_invocation(clang_cl_asan_cxxflags)
-  clang_cl_invocation = clang_invocation.replace("clang.exe","clang-cl.exe")
-  config.substitutions.append( ("%clang_cl_asan ", clang_cl_invocation) )
+
+  clang_cl_invocation = build_invocation(clang_cl_cxxflags)
+  clang_cl_invocation = clang_cl_invocation.replace("clang.exe","clang-cl.exe")
+  config.substitutions.append( ("%clang_cl ", clang_cl_invocation) )
+
+  clang_cl_asan_invocation = build_invocation(clang_cl_asan_cxxflags)
+  clang_cl_asan_invocation = clang_cl_asan_invocation.replace("clang.exe","clang-cl.exe")
+  config.substitutions.append( ("%clang_cl_asan ", clang_cl_asan_invocation) )
+
   base_lib = os.path.join(config.compiler_rt_libdir, "clang_rt.asan%%s-%s.lib" % config.target_arch)
   config.substitutions.append( ("%asan_lib", base_lib % "") )
   config.substitutions.append( ("%asan_cxx_lib", base_lib % "_cxx") )
@@ -196,16 +207,23 @@
   config.substitutions.append( ("%ld_flags_rpath_so", '') )
 
 # Must be defined after the substitutions that use %dynamiclib.
-config.substitutions.append( ("%dynamiclib", '%T/lib%xdynamiclib_namespec.so') )
-config.substitutions.append( ("%xdynamiclib_namespec", '$(basename %t).dynamic') )
+config.substitutions.append( ("%dynamiclib", '%T/%xdynamiclib_filename') )
+config.substitutions.append( ("%xdynamiclib_filename", 'lib%xdynamiclib_namespec.so') )
+config.substitutions.append( ("%xdynamiclib_namespec", '%basename_t.dynamic') )
 
 # Allow tests to use REQUIRES=stable-runtime.  For use when you cannot use XFAIL
 # because the test hangs. Adding armhf as we now have two modes.
 if config.target_arch != 'arm' and config.target_arch != 'armhf' and config.target_arch != 'aarch64':
   config.available_features.add('stable-runtime')
 
+# Fast unwinder doesn't work with Thumb
+if re.search('mthumb', config.target_cflags) is not None:
+  config.available_features.add('fast-unwinder-works')
+
 # Turn on leak detection on 64-bit Linux.
-if config.host_os == 'Linux' and config.target_arch == 'x86_64':
+leak_detection_linux = (config.host_os == 'Linux') and (config.target_arch == 'x86_64' or config.target_arch == 'i386')
+leak_detection_mac = (config.host_os == 'Darwin') and (config.target_arch == 'x86_64')
+if leak_detection_linux or leak_detection_mac:
   config.available_features.add('leak-detection')
 
 # Set LD_LIBRARY_PATH to pick dynamic runtime up properly.
diff --git a/test/builtins/CMakeLists.txt b/test/builtins/CMakeLists.txt
index 443e552..cabf767 100644
--- a/test/builtins/CMakeLists.txt
+++ b/test/builtins/CMakeLists.txt
@@ -9,6 +9,33 @@
   ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
 )
 
+#Unit tests.
+
+include(builtin-config-ix)
+
+pythonize_bool(MSVC)
+
+#TODO: Add support for Apple.
+if (NOT APPLE)
+foreach(arch ${BUILTIN_SUPPORTED_ARCH})
+  set(BUILTINS_TEST_TARGET_ARCH ${arch})
+  string(TOLOWER "-${arch}-${OS_NAME}" BUILTINS_TEST_CONFIG_SUFFIX)
+  get_test_cc_for_arch(${arch} BUILTINS_TEST_TARGET_CC BUILTINS_TEST_TARGET_CFLAGS)
+  if (${arch} STREQUAL "armhf")
+    list(APPEND BUILTINS_TEST_TARGET_CFLAGS -fomit-frame-pointer -DCOMPILER_RT_ARMHF_TARGET)
+    string(REPLACE ";" " " BUILTINS_TEST_TARGET_CFLAGS "${BUILTINS_TEST_TARGET_CFLAGS}")
+  endif()
+
+  string(TOUPPER ${arch} ARCH_UPPER_CASE)
+  set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config)
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/Unit/${CONFIG_NAME}/lit.site.cfg
+    )
+  list(APPEND BUILTINS_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/Unit/${CONFIG_NAME})
+endforeach()
+endif()
+
 add_lit_testsuite(check-builtins "Running the Builtins tests"
   ${BUILTINS_TESTSUITES}
   DEPENDS ${BUILTINS_TEST_DEPS})
diff --git a/test/builtins/Unit/absvdi2_test.c b/test/builtins/Unit/absvdi2_test.c
index f69ae41..dd9dfd1 100644
--- a/test/builtins/Unit/absvdi2_test.c
+++ b/test/builtins/Unit/absvdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- absvdi2_test.c - Test __absvdi2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/absvsi2_test.c b/test/builtins/Unit/absvsi2_test.c
index c395cca..bae306b 100644
--- a/test/builtins/Unit/absvsi2_test.c
+++ b/test/builtins/Unit/absvsi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- absvsi2_test.c - Test __absvsi2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/absvti2_test.c b/test/builtins/Unit/absvti2_test.c
index 6c626e9..0c0117d 100644
--- a/test/builtins/Unit/absvti2_test.c
+++ b/test/builtins/Unit/absvti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- absvti2_test.c - Test __absvti2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/adddf3vfp_test.c b/test/builtins/Unit/adddf3vfp_test.c
index 7395152..e0da08b 100644
--- a/test/builtins/Unit/adddf3vfp_test.c
+++ b/test/builtins/Unit/adddf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- adddf3vfp_test.c - Test __adddf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -17,7 +18,7 @@
 #include <math.h>
 
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 extern COMPILER_RT_ABI double __adddf3vfp(double a, double b);
 
 int test__adddf3vfp(double a, double b)
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__adddf3vfp(1.0, 1.0))
         return 1;
     if (test__adddf3vfp(HUGE_VAL, HUGE_VAL))
diff --git a/test/builtins/Unit/addsf3vfp_test.c b/test/builtins/Unit/addsf3vfp_test.c
index 4b3dccc..ed18de3 100644
--- a/test/builtins/Unit/addsf3vfp_test.c
+++ b/test/builtins/Unit/addsf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- addsf3vfp_test.c - Test __addsf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __addsf3vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__addsf3vfp(float a, float b)
 {
     float actual = __addsf3vfp(a, b);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__addsf3vfp(1.0, 1.0))
         return 1;
     if (test__addsf3vfp(HUGE_VALF, HUGE_VALF))
diff --git a/test/builtins/Unit/addtf3_test.c b/test/builtins/Unit/addtf3_test.c
index 7b92cce..57a4729 100644
--- a/test/builtins/Unit/addtf3_test.c
+++ b/test/builtins/Unit/addtf3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- addtf3_test.c - Test __addtf3 ------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/addvdi3_test.c b/test/builtins/Unit/addvdi3_test.c
index 5f8729a..99e7040 100644
--- a/test/builtins/Unit/addvdi3_test.c
+++ b/test/builtins/Unit/addvdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- addvdi3_test.c - Test __addvdi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/addvsi3_test.c b/test/builtins/Unit/addvsi3_test.c
index b5358d0..11fdbc3 100644
--- a/test/builtins/Unit/addvsi3_test.c
+++ b/test/builtins/Unit/addvsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- addvsi3_test.c - Test __addvsi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/addvti3_test.c b/test/builtins/Unit/addvti3_test.c
index e2f75cf..3ffcf4b 100644
--- a/test/builtins/Unit/addvti3_test.c
+++ b/test/builtins/Unit/addvti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- addvti3_test.c - Test __addvti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c b/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c
index ce8b0a4..0d9e006 100644
--- a/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c
+++ b/test/builtins/Unit/arm/aeabi_cdcmpeq_test.c
@@ -1,3 +1,6 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %arm_call_apsr -o %t.aspr.o
+// RUN: %clang_builtins %s %t.aspr.o %librt -o %t && %run %t
 //===-- aeabi_cdcmpeq.c - Test __aeabi_cdcmpeq ----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_cdcmple_test.c b/test/builtins/Unit/arm/aeabi_cdcmple_test.c
index afc7014..e499bf8 100644
--- a/test/builtins/Unit/arm/aeabi_cdcmple_test.c
+++ b/test/builtins/Unit/arm/aeabi_cdcmple_test.c
@@ -1,3 +1,7 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %arm_call_apsr -o %t.aspr.o
+// RUN: %clang_builtins %s  %t.aspr.o %librt -o %t && %run %t
+
 //===-- aeabi_cdcmple.c - Test __aeabi_cdcmple and __aeabi_cdrcmple -------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c b/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c
index fe01664..72a556c 100644
--- a/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c
+++ b/test/builtins/Unit/arm/aeabi_cfcmpeq_test.c
@@ -1,3 +1,6 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %arm_call_apsr -o %t.aspr.o
+// RUN: %clang_builtins %s  %t.aspr.o %librt -o %t && %run %t
 //===-- aeabi_cfcmpeq.c - Test __aeabi_cfcmpeq ----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_cfcmple_test.c b/test/builtins/Unit/arm/aeabi_cfcmple_test.c
index aebe425..a09aead 100644
--- a/test/builtins/Unit/arm/aeabi_cfcmple_test.c
+++ b/test/builtins/Unit/arm/aeabi_cfcmple_test.c
@@ -1,3 +1,7 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %arm_call_apsr -o %t.aspr.o
+// RUN: %clang_builtins %s  %t.aspr.o %librt -o %t && %run %t
+
 //===-- aeabi_cfcmple.c - Test __aeabi_cfcmple and __aeabi_cfrcmple -------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_drsub_test.c b/test/builtins/Unit/arm/aeabi_drsub_test.c
index 7d867ef..8bd04a9 100644
--- a/test/builtins/Unit/arm/aeabi_drsub_test.c
+++ b/test/builtins/Unit/arm/aeabi_drsub_test.c
@@ -1,3 +1,5 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- aeabi_drsub.c - Test __aeabi_drsub --------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_frsub_test.c b/test/builtins/Unit/arm/aeabi_frsub_test.c
index b8b21b9..3d30161 100644
--- a/test/builtins/Unit/arm/aeabi_frsub_test.c
+++ b/test/builtins/Unit/arm/aeabi_frsub_test.c
@@ -1,3 +1,5 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- aeabi_frsub.c - Test __aeabi_frsub --------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/arm/aeabi_idivmod_test.c b/test/builtins/Unit/arm/aeabi_idivmod_test.c
new file mode 100644
index 0000000..ac18046
--- /dev/null
+++ b/test/builtins/Unit/arm/aeabi_idivmod_test.c
@@ -0,0 +1,82 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+//===-- aeabi_idivmod_test.c - Test __aeabi_idivmod -----------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file tests __aeabi_idivmod for the compiler_rt library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "int_lib.h"
+#include <stdio.h>
+
+#if __arm__
+// Based on divmodsi4_test.c
+
+extern du_int __aeabi_idivmod(si_int a, si_int b);
+
+int test__aeabi_idivmod(si_int a, si_int b,
+						si_int expected_result, si_int expected_rem)
+{
+	  si_int rem;
+    du_int ret = __aeabi_idivmod(a, b);
+    rem = ret >> 32;
+    si_int result = ret & 0xFFFFFFFF;
+    if (result != expected_result) {
+        printf("error in __aeabi_idivmod: %d / %d = %d, expected %d\n",
+               a, b, result, expected_result);
+		return 1;
+	}
+    if (rem != expected_rem) {
+        printf("error in __aeabi_idivmod: %d mod %d = %d, expected %d\n",
+               a, b, rem, expected_rem);
+		return 1;
+	}
+
+    return 0;
+}
+#endif
+
+
+int main()
+{
+#if __arm__
+    if (test__aeabi_idivmod(0, 1, 0, 0))
+        return 1;
+    if (test__aeabi_idivmod(0, -1, 0, 0))
+        return 1;
+
+    if (test__aeabi_idivmod(2, 1, 2, 0))
+        return 1;
+    if (test__aeabi_idivmod(2, -1, -2, 0))
+        return 1;
+    if (test__aeabi_idivmod(-2, 1, -2, 0))
+        return 1;
+    if (test__aeabi_idivmod(-2, -1, 2, 0))
+        return 1;
+
+	if (test__aeabi_idivmod(7, 5, 1, 2))
+        return 1;
+	if (test__aeabi_idivmod(-7, 5, -1, -2))
+        return 1;
+	if (test__aeabi_idivmod(19, 5, 3, 4))
+        return 1;
+	if (test__aeabi_idivmod(19, -5, -3, 4))
+        return 1;
+
+	if (test__aeabi_idivmod(0x80000000, 8, 0xf0000000, 0))
+        return 1;
+	if (test__aeabi_idivmod(0x80000007, 8, 0xf0000001, -1))
+        return 1;
+#else
+    printf("skipped\n");
+#endif
+
+    return 0;
+}
diff --git a/test/builtins/Unit/arm/aeabi_uidivmod_test.c b/test/builtins/Unit/arm/aeabi_uidivmod_test.c
new file mode 100644
index 0000000..9ac51da
--- /dev/null
+++ b/test/builtins/Unit/arm/aeabi_uidivmod_test.c
@@ -0,0 +1,69 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+//===-- aeabi_uidivmod_test.c - Test __aeabi_uidivmod ---------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file tests __aeabi_uidivmod for the compiler_rt library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "int_lib.h"
+#include <stdio.h>
+
+#if __arm__
+// Based on udivmodsi4_test.c
+
+extern du_int __aeabi_uidivmod(su_int a, su_int b);
+
+int test__aeabi_uidivmod(su_int a, su_int b,
+						su_int expected_result, su_int expected_rem)
+{
+    du_int ret = __aeabi_uidivmod(a, b);
+    su_int rem = ret >> 32;
+    si_int result = ret & 0xFFFFFFFF;
+
+    if (result != expected_result) {
+        printf("error in __aeabi_uidivmod: %u / %u = %u, expected %u\n",
+               a, b, result, expected_result);
+		return 1;
+	}
+    if (rem != expected_rem) {
+        printf("error in __aeabi_uidivmod: %u mod %u = %u, expected %u\n",
+               a, b, rem, expected_rem);
+		return 1;
+	}
+
+    return 0;
+}
+#endif
+
+
+int main()
+{
+#if __arm__
+    if (test__aeabi_uidivmod(0, 1, 0, 0))
+        return 1;
+
+    if (test__aeabi_uidivmod(2, 1, 2, 0))
+        return 1;
+
+	if (test__aeabi_uidivmod(19, 5, 3, 4))
+        return 1;
+
+	if (test__aeabi_uidivmod(0x80000000, 8, 0x10000000, 0))
+        return 1;
+ 
+ 	if (test__aeabi_uidivmod(0x80000003, 8, 0x10000000, 3))
+        return 1;
+#else
+    printf("skipped\n");
+#endif
+
+	return 0;
+}
diff --git a/test/builtins/Unit/arm/aeabi_uldivmod_test.c b/test/builtins/Unit/arm/aeabi_uldivmod_test.c
new file mode 100644
index 0000000..a40f006
--- /dev/null
+++ b/test/builtins/Unit/arm/aeabi_uldivmod_test.c
@@ -0,0 +1,20659 @@
+// REQUIRES-ANY: arm-target-arch,armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+//===-- aeabi_uldivmod_test.c - Test aeabi_uldivmod -----------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file tests aeabi_uldivmod for the compiler_rt library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "int_lib.h"
+#include <stdio.h>
+
+#if __arm__
+// Based on udivmoddi4_test.c
+
+COMPILER_RT_ABI void /* __value_in_regs */ __aeabi_uldivmod(du_int a, du_int b);
+
+int test_aeabi_uldivmod(du_int a, du_int b, du_int expected_q, du_int expected_r)
+{
+    du_int q, r;
+    __asm__(
+        "movs r0, %Q[a] \n"
+        "movs r1, %R[a] \n"
+        "movs r2, %Q[b] \n"
+        "movs r3, %R[b] \n"
+        "bl __aeabi_uldivmod \n"
+        "movs %Q[q], r0\n"
+        "movs %R[q], r1\n"
+        "movs %Q[r], r2\n"
+        "movs %R[r], r3\n"
+        : [q] "=r" (q), [r] "=r"(r)
+        : [a] "r"(a), [b] "r"(b)
+        : "lr", "r0", "r1", "r2", "r3"
+        );
+    if (q != expected_q || r != expected_r)
+        printf("error in aeabi_uldivmod: %llX / %llX = %llX, R = %llX, expected %llX, %llX\n",
+               a, b, q, r, expected_q, expected_r);
+    return !(q == expected_q && r == expected_r);
+}
+
+char assumption_1[sizeof(di_int) == 2*sizeof(si_int)] = {0};
+
+du_int tests[][4] =
+{
+{0x0000000000000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000000uLL},
+{0x0000000000000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000000000001uLL, 0x0000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000001uLL},
+{0x0000000000000002uLL, 0x0000000000000001uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x0000000000000002uLL, 0x0000000000000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000000000002uLL, 0x0000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000002uLL},
+{0x0000000000000003uLL, 0x0000000000000001uLL, 0x0000000000000003uLL, 0x0000000000000000uLL},
+{0x0000000000000003uLL, 0x0000000000000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000000000003uLL, 0x0000000000000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000000000003uLL, 0x0000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000003uLL},
+{0x0000000000000010uLL, 0x0000000000000001uLL, 0x0000000000000010uLL, 0x0000000000000000uLL},
+{0x0000000000000010uLL, 0x0000000000000002uLL, 0x0000000000000008uLL, 0x0000000000000000uLL},
+{0x0000000000000010uLL, 0x0000000000000003uLL, 0x0000000000000005uLL, 0x0000000000000001uLL},
+{0x0000000000000010uLL, 0x0000000000000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000000000010uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x0000000000000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000000000010uLL},
+{0x00000000078644FAuLL, 0x0000000000000001uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL},
+{0x00000000078644FAuLL, 0x0000000000000002uLL, 0x0000000003C3227DuLL, 0x0000000000000000uLL},
+{0x00000000078644FAuLL, 0x0000000000000003uLL, 0x00000000028216FEuLL, 0x0000000000000000uLL},
+{0x00000000078644FAuLL, 0x0000000000000010uLL, 0x000000000078644FuLL, 0x000000000000000AuLL},
+{0x00000000078644FAuLL, 0x00000000078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000000078644FAuLL, 0x000000000747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x00000000078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x00000000078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000078644FAuLL},
+{0x000000000747AE14uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL},
+{0x000000000747AE14uLL, 0x0000000000000002uLL, 0x0000000003A3D70AuLL, 0x0000000000000000uLL},
+{0x000000000747AE14uLL, 0x0000000000000003uLL, 0x00000000026D3A06uLL, 0x0000000000000002uLL},
+{0x000000000747AE14uLL, 0x0000000000000010uLL, 0x0000000000747AE1uLL, 0x0000000000000004uLL},
+{0x000000000747AE14uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000000747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000000747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000000747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000000747AE14uLL},
+{0x000000007FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x000000003FFFFFFFuLL, 0x0000000000000001uLL},
+{0x000000007FFFFFFFuLL, 0x0000000000000003uLL, 0x000000002AAAAAAAuLL, 0x0000000000000001uLL},
+{0x000000007FFFFFFFuLL, 0x0000000000000010uLL, 0x0000000007FFFFFFuLL, 0x000000000000000FuLL},
+{0x000000007FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000011uLL, 0x0000000000156B65uLL},
+{0x000000007FFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000011uLL, 0x00000000043D70ABuLL},
+{0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000007FFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x000000007FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000007FFFFFFFuLL},
+{0x0000000080000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x0000000080000000uLL, 0x0000000000000002uLL, 0x0000000040000000uLL, 0x0000000000000000uLL},
+{0x0000000080000000uLL, 0x0000000000000003uLL, 0x000000002AAAAAAAuLL, 0x0000000000000002uLL},
+{0x0000000080000000uLL, 0x0000000000000010uLL, 0x0000000008000000uLL, 0x0000000000000000uLL},
+{0x0000000080000000uLL, 0x00000000078644FAuLL, 0x0000000000000011uLL, 0x0000000000156B66uLL},
+{0x0000000080000000uLL, 0x000000000747AE14uLL, 0x0000000000000011uLL, 0x00000000043D70ACuLL},
+{0x0000000080000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000080000000uLL, 0x0000000080000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000080000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x0000000080000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000080000000uLL},
+{0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000001uLL},
+{0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000055555554uLL, 0x0000000000000001uLL},
+{0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000000FFFFFFFuLL, 0x000000000000000DuLL},
+{0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6C9uLL},
+{0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333341uLL},
+{0x00000000FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFDuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000055555554uLL, 0x0000000000000002uLL},
+{0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000000FFFFFFFuLL, 0x000000000000000EuLL},
+{0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6CAuLL},
+{0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333342uLL},
+{0x00000000FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFEuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000055555555uLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000000FFFFFFFuLL, 0x000000000000000FuLL},
+{0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6CBuLL},
+{0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333343uLL},
+{0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x00000000FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000055555555uLL, 0x0000000000000001uLL},
+{0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000010000000uLL, 0x0000000000000000uLL},
+{0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6CCuLL},
+{0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333344uLL},
+{0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000100000000uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000100000000uLL, 0x0000000100000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000000uLL},
+{0x0000000100000001uLL, 0x0000000000000001uLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x0000000100000001uLL, 0x0000000000000002uLL, 0x0000000080000000uLL, 0x0000000000000001uLL},
+{0x0000000100000001uLL, 0x0000000000000003uLL, 0x0000000055555555uLL, 0x0000000000000002uLL},
+{0x0000000100000001uLL, 0x0000000000000010uLL, 0x0000000010000000uLL, 0x0000000000000001uLL},
+{0x0000000100000001uLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6CDuLL},
+{0x0000000100000001uLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333345uLL},
+{0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x0000000100000001uLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000100000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000100000001uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000100000001uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000100000001uLL, 0x0000000100000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000001uLL},
+{0x0000000100000002uLL, 0x0000000000000001uLL, 0x0000000100000002uLL, 0x0000000000000000uLL},
+{0x0000000100000002uLL, 0x0000000000000002uLL, 0x0000000080000001uLL, 0x0000000000000000uLL},
+{0x0000000100000002uLL, 0x0000000000000003uLL, 0x0000000055555556uLL, 0x0000000000000000uLL},
+{0x0000000100000002uLL, 0x0000000000000010uLL, 0x0000000010000000uLL, 0x0000000000000002uLL},
+{0x0000000100000002uLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6CEuLL},
+{0x0000000100000002uLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333346uLL},
+{0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0x0000000100000002uLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x0000000100000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000100000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000100000002uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000100000002uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000100000002uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000100000002uLL, 0x0000000100000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000002uLL},
+{0x0000000100000003uLL, 0x0000000000000001uLL, 0x0000000100000003uLL, 0x0000000000000000uLL},
+{0x0000000100000003uLL, 0x0000000000000002uLL, 0x0000000080000001uLL, 0x0000000000000001uLL},
+{0x0000000100000003uLL, 0x0000000000000003uLL, 0x0000000055555556uLL, 0x0000000000000001uLL},
+{0x0000000100000003uLL, 0x0000000000000010uLL, 0x0000000010000000uLL, 0x0000000000000003uLL},
+{0x0000000100000003uLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6CFuLL},
+{0x0000000100000003uLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333347uLL},
+{0x0000000100000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0x0000000100000003uLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x0000000100000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000006uLL},
+{0x0000000100000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x0000000100000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000100000003uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000100000003uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000100000003uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000100000003uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000100000003uLL, 0x0000000100000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000003uLL},
+{0x0000000100000010uLL, 0x0000000000000001uLL, 0x0000000100000010uLL, 0x0000000000000000uLL},
+{0x0000000100000010uLL, 0x0000000000000002uLL, 0x0000000080000008uLL, 0x0000000000000000uLL},
+{0x0000000100000010uLL, 0x0000000000000003uLL, 0x000000005555555AuLL, 0x0000000000000002uLL},
+{0x0000000100000010uLL, 0x0000000000000010uLL, 0x0000000010000001uLL, 0x0000000000000000uLL},
+{0x0000000100000010uLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000002AD6DCuLL},
+{0x0000000100000010uLL, 0x000000000747AE14uLL, 0x0000000000000023uLL, 0x0000000001333354uLL},
+{0x0000000100000010uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000012uLL},
+{0x0000000100000010uLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x0000000000000010uLL},
+{0x0000000100000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000013uLL},
+{0x0000000100000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000012uLL},
+{0x0000000100000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000011uLL},
+{0x0000000100000010uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x0000000100000010uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x0000000100000010uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x0000000100000010uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x0000000100000010uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000100000010uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x0000000100000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000100000010uLL},
+{0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL},
+{0x00000001078644FAuLL, 0x0000000000000002uLL, 0x0000000083C3227DuLL, 0x0000000000000000uLL},
+{0x00000001078644FAuLL, 0x0000000000000003uLL, 0x0000000057D76C53uLL, 0x0000000000000001uLL},
+{0x00000001078644FAuLL, 0x0000000000000010uLL, 0x000000001078644FuLL, 0x000000000000000AuLL},
+{0x00000001078644FAuLL, 0x00000000078644FAuLL, 0x0000000000000023uLL, 0x00000000002AD6CCuLL},
+{0x00000001078644FAuLL, 0x000000000747AE14uLL, 0x0000000000000024uLL, 0x000000000171CA2AuLL},
+{0x00000001078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x00000000078644FCuLL},
+{0x00000001078644FAuLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x00000000078644FAuLL},
+{0x00000001078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000078644FDuLL},
+{0x00000001078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000078644FCuLL},
+{0x00000001078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000078644FBuLL},
+{0x00000001078644FAuLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x00000001078644FAuLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x00000001078644FAuLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x00000001078644FAuLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x00000001078644FAuLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000001078644FAuLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x00000001078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x00000001078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001078644FAuLL},
+{0x000000010747AE14uLL, 0x0000000000000001uLL, 0x000000010747AE14uLL, 0x0000000000000000uLL},
+{0x000000010747AE14uLL, 0x0000000000000002uLL, 0x0000000083A3D70AuLL, 0x0000000000000000uLL},
+{0x000000010747AE14uLL, 0x0000000000000003uLL, 0x0000000057C28F5CuLL, 0x0000000000000000uLL},
+{0x000000010747AE14uLL, 0x0000000000000010uLL, 0x0000000010747AE1uLL, 0x0000000000000004uLL},
+{0x000000010747AE14uLL, 0x00000000078644FAuLL, 0x0000000000000022uLL, 0x00000000077284E0uLL},
+{0x000000010747AE14uLL, 0x000000000747AE14uLL, 0x0000000000000024uLL, 0x0000000001333344uLL},
+{0x000000010747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL, 0x000000000747AE16uLL},
+{0x000000010747AE14uLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x000000000747AE14uLL},
+{0x000000010747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x000000000747AE17uLL},
+{0x000000010747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x000000000747AE16uLL},
+{0x000000010747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x000000000747AE15uLL},
+{0x000000010747AE14uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x000000010747AE14uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x000000010747AE14uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x000000010747AE14uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x000000010747AE14uLL, 0x00000001078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000010747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000010747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000010747AE14uLL},
+{0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL},
+{0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x00000000BFFFFFFFuLL, 0x0000000000000001uLL},
+{0x000000017FFFFFFFuLL, 0x0000000000000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0x000000017FFFFFFFuLL, 0x0000000000000010uLL, 0x0000000017FFFFFFuLL, 0x000000000000000FuLL},
+{0x000000017FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000033uLL, 0x0000000000404231uLL},
+{0x000000017FFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000034uLL, 0x000000000570A3EFuLL},
+{0x000000017FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000002uLL},
+{0x000000017FFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x000000017FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x000000017FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x000000017FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x000000017FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x000000017FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x000000017FFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x000000017FFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x000000017FFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x000000017FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000017FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x000000017FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000017FFFFFFFuLL},
+{0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000180000000uLL, 0x0000000000000000uLL},
+{0x0000000180000000uLL, 0x0000000000000002uLL, 0x00000000C0000000uLL, 0x0000000000000000uLL},
+{0x0000000180000000uLL, 0x0000000000000003uLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x0000000180000000uLL, 0x0000000000000010uLL, 0x0000000018000000uLL, 0x0000000000000000uLL},
+{0x0000000180000000uLL, 0x00000000078644FAuLL, 0x0000000000000033uLL, 0x0000000000404232uLL},
+{0x0000000180000000uLL, 0x000000000747AE14uLL, 0x0000000000000034uLL, 0x000000000570A3F0uLL},
+{0x0000000180000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000003uLL},
+{0x0000000180000000uLL, 0x0000000080000000uLL, 0x0000000000000003uLL, 0x0000000000000000uLL},
+{0x0000000180000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000180000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000180000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000180000000uLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0000000180000000uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0000000180000000uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0000000180000000uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0000000180000000uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x0000000180000000uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x0000000180000000uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x0000000180000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000180000000uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000180000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x0000000180000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000180000000uLL},
+{0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFDuLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFDuLL, 0x0000000000000003uLL, 0x00000000AAAAAAA9uLL, 0x0000000000000002uLL},
+{0x00000001FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000001FFFFFFFuLL, 0x000000000000000DuLL},
+{0x00000001FFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD95uLL},
+{0x00000001FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x0000000002666685uLL},
+{0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000000000003uLL, 0x000000007FFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x00000001FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x00000001FFFFFFFDuLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x00000001FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFDuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFEuLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFEuLL, 0x0000000000000003uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000001FFFFFFFuLL, 0x000000000000000EuLL},
+{0x00000001FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD96uLL},
+{0x00000001FFFFFFFEuLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x0000000002666686uLL},
+{0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000002uLL},
+{0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000003uLL, 0x000000007FFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0x00000001FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x00000001FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x00000001FFFFFFFEuLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x00000001FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFEuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000000000003uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000001FFFFFFFuLL, 0x000000000000000FuLL},
+{0x00000001FFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD97uLL},
+{0x00000001FFFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x0000000002666687uLL},
+{0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000003uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000003uLL, 0x000000007FFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0x00000001FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x00000001FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x00000001FFFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x00000001FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x00000001FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000001FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000001FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x00000001FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000001FFFFFFFFuLL},
+{0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000200000000uLL, 0x0000000000000000uLL},
+{0x0000000200000000uLL, 0x0000000000000002uLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x0000000200000000uLL, 0x0000000000000003uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000002uLL},
+{0x0000000200000000uLL, 0x0000000000000010uLL, 0x0000000020000000uLL, 0x0000000000000000uLL},
+{0x0000000200000000uLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD98uLL},
+{0x0000000200000000uLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x0000000002666688uLL},
+{0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000004uLL},
+{0x0000000200000000uLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x0000000000000000uLL},
+{0x0000000200000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000006uLL},
+{0x0000000200000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0x0000000200000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x0000000200000000uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x0000000200000000uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000200000000uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x0000000200000000uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x0000000200000000uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF0uLL},
+{0x0000000200000000uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB06uLL},
+{0x0000000200000000uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851ECuLL},
+{0x0000000200000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000200000000uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0000000200000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000200000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000200000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000200000000uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000200000000uLL, 0x0000000200000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000000uLL},
+{0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000200000001uLL, 0x0000000000000000uLL},
+{0x0000000200000001uLL, 0x0000000000000002uLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x0000000200000001uLL, 0x0000000000000003uLL, 0x00000000AAAAAAABuLL, 0x0000000000000000uLL},
+{0x0000000200000001uLL, 0x0000000000000010uLL, 0x0000000020000000uLL, 0x0000000000000001uLL},
+{0x0000000200000001uLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD99uLL},
+{0x0000000200000001uLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x0000000002666689uLL},
+{0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000005uLL},
+{0x0000000200000001uLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x0000000000000001uLL},
+{0x0000000200000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000007uLL},
+{0x0000000200000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0x0000000200000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x0000000200000001uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x0000000200000001uLL, 0x0000000100000001uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000200000001uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000200000001uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x0000000200000001uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF1uLL},
+{0x0000000200000001uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB07uLL},
+{0x0000000200000001uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EDuLL},
+{0x0000000200000001uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000200000001uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000200000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000200000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000200000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000200000001uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000200000001uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000200000001uLL, 0x0000000200000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000001uLL},
+{0x0000000200000002uLL, 0x0000000000000001uLL, 0x0000000200000002uLL, 0x0000000000000000uLL},
+{0x0000000200000002uLL, 0x0000000000000002uLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x0000000200000002uLL, 0x0000000000000003uLL, 0x00000000AAAAAAABuLL, 0x0000000000000001uLL},
+{0x0000000200000002uLL, 0x0000000000000010uLL, 0x0000000020000000uLL, 0x0000000000000002uLL},
+{0x0000000200000002uLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD9AuLL},
+{0x0000000200000002uLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x000000000266668AuLL},
+{0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000006uLL},
+{0x0000000200000002uLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x0000000000000002uLL},
+{0x0000000200000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000008uLL},
+{0x0000000200000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000006uLL},
+{0x0000000200000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0x0000000200000002uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x0000000200000002uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x0000000200000002uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000200000002uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000200000002uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF2uLL},
+{0x0000000200000002uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB08uLL},
+{0x0000000200000002uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EEuLL},
+{0x0000000200000002uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000200000002uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000200000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x0000000200000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000200000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000200000002uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000200000002uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000200000002uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000200000002uLL, 0x0000000200000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000002uLL},
+{0x0000000200000003uLL, 0x0000000000000001uLL, 0x0000000200000003uLL, 0x0000000000000000uLL},
+{0x0000000200000003uLL, 0x0000000000000002uLL, 0x0000000100000001uLL, 0x0000000000000001uLL},
+{0x0000000200000003uLL, 0x0000000000000003uLL, 0x00000000AAAAAAABuLL, 0x0000000000000002uLL},
+{0x0000000200000003uLL, 0x0000000000000010uLL, 0x0000000020000000uLL, 0x0000000000000003uLL},
+{0x0000000200000003uLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055AD9BuLL},
+{0x0000000200000003uLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x000000000266668BuLL},
+{0x0000000200000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000007uLL},
+{0x0000000200000003uLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x0000000000000003uLL},
+{0x0000000200000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000009uLL},
+{0x0000000200000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000007uLL},
+{0x0000000200000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0x0000000200000003uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x0000000200000003uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x0000000200000003uLL, 0x0000000100000002uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000200000003uLL, 0x0000000100000003uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000200000003uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF3uLL},
+{0x0000000200000003uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB09uLL},
+{0x0000000200000003uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EFuLL},
+{0x0000000200000003uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000004uLL},
+{0x0000000200000003uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000200000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000006uLL},
+{0x0000000200000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x0000000200000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000200000003uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000200000003uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000200000003uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000200000003uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000200000003uLL, 0x0000000200000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000003uLL},
+{0x0000000200000010uLL, 0x0000000000000001uLL, 0x0000000200000010uLL, 0x0000000000000000uLL},
+{0x0000000200000010uLL, 0x0000000000000002uLL, 0x0000000100000008uLL, 0x0000000000000000uLL},
+{0x0000000200000010uLL, 0x0000000000000003uLL, 0x00000000AAAAAAB0uLL, 0x0000000000000000uLL},
+{0x0000000200000010uLL, 0x0000000000000010uLL, 0x0000000020000001uLL, 0x0000000000000000uLL},
+{0x0000000200000010uLL, 0x00000000078644FAuLL, 0x0000000000000044uLL, 0x000000000055ADA8uLL},
+{0x0000000200000010uLL, 0x000000000747AE14uLL, 0x0000000000000046uLL, 0x0000000002666698uLL},
+{0x0000000200000010uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000014uLL},
+{0x0000000200000010uLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x0000000000000010uLL},
+{0x0000000200000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000016uLL},
+{0x0000000200000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000014uLL},
+{0x0000000200000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000012uLL},
+{0x0000000200000010uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000000000010uLL},
+{0x0000000200000010uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x000000000000000EuLL},
+{0x0000000200000010uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x000000000000000CuLL},
+{0x0000000200000010uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x000000000000000AuLL},
+{0x0000000200000010uLL, 0x0000000100000010uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000200000010uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB16uLL},
+{0x0000000200000010uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851FCuLL},
+{0x0000000200000010uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000011uLL},
+{0x0000000200000010uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000080000010uLL},
+{0x0000000200000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000013uLL},
+{0x0000000200000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000012uLL},
+{0x0000000200000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000011uLL},
+{0x0000000200000010uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x0000000200000010uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x0000000200000010uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x0000000200000010uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x0000000200000010uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000200000010uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x0000000200000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000200000010uLL},
+{0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL},
+{0x00000002078644FAuLL, 0x0000000000000002uLL, 0x0000000103C3227DuLL, 0x0000000000000000uLL},
+{0x00000002078644FAuLL, 0x0000000000000003uLL, 0x00000000AD2CC1A8uLL, 0x0000000000000002uLL},
+{0x00000002078644FAuLL, 0x0000000000000010uLL, 0x000000002078644FuLL, 0x000000000000000AuLL},
+{0x00000002078644FAuLL, 0x00000000078644FAuLL, 0x0000000000000045uLL, 0x000000000055AD98uLL},
+{0x00000002078644FAuLL, 0x000000000747AE14uLL, 0x0000000000000047uLL, 0x0000000002A4FD6EuLL},
+{0x00000002078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x00000000078644FEuLL},
+{0x00000002078644FAuLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x00000000078644FAuLL},
+{0x00000002078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000007864500uLL},
+{0x00000002078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x00000000078644FEuLL},
+{0x00000002078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x00000000078644FCuLL},
+{0x00000002078644FAuLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x00000000078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x00000000078644F8uLL},
+{0x00000002078644FAuLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000078644F6uLL},
+{0x00000002078644FAuLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000078644F4uLL},
+{0x00000002078644FAuLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000078644DAuLL},
+{0x00000002078644FAuLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000002078644FAuLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x00000001003E96E6uLL},
+{0x00000002078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x00000000878644FBuLL},
+{0x00000002078644FAuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x00000000878644FAuLL},
+{0x00000002078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000078644FDuLL},
+{0x00000002078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000078644FCuLL},
+{0x00000002078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000078644FBuLL},
+{0x00000002078644FAuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x00000002078644FAuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x00000002078644FAuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x00000002078644FAuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x00000002078644FAuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000002078644FAuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x00000002078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x00000002078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002078644FAuLL},
+{0x000000020747AE14uLL, 0x0000000000000001uLL, 0x000000020747AE14uLL, 0x0000000000000000uLL},
+{0x000000020747AE14uLL, 0x0000000000000002uLL, 0x0000000103A3D70AuLL, 0x0000000000000000uLL},
+{0x000000020747AE14uLL, 0x0000000000000003uLL, 0x00000000AD17E4B1uLL, 0x0000000000000001uLL},
+{0x000000020747AE14uLL, 0x0000000000000010uLL, 0x0000000020747AE1uLL, 0x0000000000000004uLL},
+{0x000000020747AE14uLL, 0x00000000078644FAuLL, 0x0000000000000045uLL, 0x00000000001716B2uLL},
+{0x000000020747AE14uLL, 0x000000000747AE14uLL, 0x0000000000000047uLL, 0x0000000002666688uLL},
+{0x000000020747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL, 0x000000000747AE18uLL},
+{0x000000020747AE14uLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x000000000747AE14uLL},
+{0x000000020747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x000000000747AE1AuLL},
+{0x000000020747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x000000000747AE18uLL},
+{0x000000020747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x000000000747AE16uLL},
+{0x000000020747AE14uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x000000000747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x000000000747AE12uLL},
+{0x000000020747AE14uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x000000000747AE10uLL},
+{0x000000020747AE14uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x000000000747AE0EuLL},
+{0x000000020747AE14uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x000000000747ADF4uLL},
+{0x000000020747AE14uLL, 0x00000001078644FAuLL, 0x0000000000000001uLL, 0x00000000FFC1691AuLL},
+{0x000000020747AE14uLL, 0x000000010747AE14uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x000000020747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x000000008747AE15uLL},
+{0x000000020747AE14uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000008747AE14uLL},
+{0x000000020747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x000000000747AE17uLL},
+{0x000000020747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x000000000747AE16uLL},
+{0x000000020747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x000000000747AE15uLL},
+{0x000000020747AE14uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x000000020747AE14uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x000000020747AE14uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x000000020747AE14uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x000000020747AE14uLL, 0x00000002078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000020747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000020747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000020747AE14uLL},
+{0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x000000027FFFFFFFuLL, 0x0000000000000000uLL},
+{0x000000027FFFFFFFuLL, 0x0000000000000002uLL, 0x000000013FFFFFFFuLL, 0x0000000000000001uLL},
+{0x000000027FFFFFFFuLL, 0x0000000000000003uLL, 0x00000000D5555555uLL, 0x0000000000000000uLL},
+{0x000000027FFFFFFFuLL, 0x0000000000000010uLL, 0x0000000027FFFFFFuLL, 0x000000000000000FuLL},
+{0x000000027FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000055uLL, 0x00000000006B18FDuLL},
+{0x000000027FFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000057uLL, 0x0000000006A3D733uLL},
+{0x000000027FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000005uLL, 0x0000000000000004uLL},
+{0x000000027FFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000004uLL, 0x000000007FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000080000005uLL},
+{0x000000027FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000080000003uLL},
+{0x000000027FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000080000001uLL},
+{0x000000027FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x000000007FFFFFFDuLL},
+{0x000000027FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x000000007FFFFFFBuLL},
+{0x000000027FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x000000007FFFFFF9uLL},
+{0x000000027FFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x000000007FFFFFDFuLL},
+{0x000000027FFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x0000000070F3760BuLL},
+{0x000000027FFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x000000007170A3D7uLL},
+{0x000000027FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x000000027FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x000000027FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x000000027FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x000000027FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x000000027FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x000000027FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x000000027FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x000000027FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x000000027FFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x000000027FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000027FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x000000027FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000027FFFFFFFuLL},
+{0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000280000000uLL, 0x0000000000000000uLL},
+{0x0000000280000000uLL, 0x0000000000000002uLL, 0x0000000140000000uLL, 0x0000000000000000uLL},
+{0x0000000280000000uLL, 0x0000000000000003uLL, 0x00000000D5555555uLL, 0x0000000000000001uLL},
+{0x0000000280000000uLL, 0x0000000000000010uLL, 0x0000000028000000uLL, 0x0000000000000000uLL},
+{0x0000000280000000uLL, 0x00000000078644FAuLL, 0x0000000000000055uLL, 0x00000000006B18FEuLL},
+{0x0000000280000000uLL, 0x000000000747AE14uLL, 0x0000000000000057uLL, 0x0000000006A3D734uLL},
+{0x0000000280000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000005uLL, 0x0000000000000005uLL},
+{0x0000000280000000uLL, 0x0000000080000000uLL, 0x0000000000000005uLL, 0x0000000000000000uLL},
+{0x0000000280000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000080000006uLL},
+{0x0000000280000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000080000004uLL},
+{0x0000000280000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000080000002uLL},
+{0x0000000280000000uLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x0000000080000000uLL},
+{0x0000000280000000uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x000000007FFFFFFEuLL},
+{0x0000000280000000uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x000000007FFFFFFCuLL},
+{0x0000000280000000uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x000000007FFFFFFAuLL},
+{0x0000000280000000uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x000000007FFFFFE0uLL},
+{0x0000000280000000uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x0000000070F3760CuLL},
+{0x0000000280000000uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x000000007170A3D8uLL},
+{0x0000000280000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000280000000uLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000280000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000280000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000280000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000280000000uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0000000280000000uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0000000280000000uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0000000280000000uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0000000280000000uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x0000000280000000uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x0000000280000000uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x0000000280000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000280000000uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000280000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x0000000280000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000280000000uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000000000002uLL, 0x000000017FFFFFFEuLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000000000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000002FFFFFFFuLL, 0x000000000000000DuLL},
+{0x00000002FFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808461uLL},
+{0x00000002FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999C9uLL},
+{0x00000002FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000003uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000000000005uLL, 0x000000007FFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000000000006uLL},
+{0x00000002FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000003uLL},
+{0x00000002FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFBuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF9uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF7uLL},
+{0x00000002FFFFFFFDuLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFDDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F37609uLL},
+{0x00000002FFFFFFFDuLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D5uLL},
+{0x00000002FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000002FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000002FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x00000002FFFFFFFDuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x00000002FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFDuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000000000002uLL, 0x000000017FFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000000000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000002FFFFFFFuLL, 0x000000000000000EuLL},
+{0x00000002FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808462uLL},
+{0x00000002FFFFFFFEuLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999CAuLL},
+{0x00000002FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000004uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000005uLL, 0x000000007FFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000000000007uLL},
+{0x00000002FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000004uLL},
+{0x00000002FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFCuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFAuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF8uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFDEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760AuLL},
+{0x00000002FFFFFFFEuLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D6uLL},
+{0x00000002FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x00000002FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000002FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x00000002FFFFFFFEuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x00000002FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFEuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000000000002uLL, 0x000000017FFFFFFFuLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000000000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000002FFFFFFFuLL, 0x000000000000000FuLL},
+{0x00000002FFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808463uLL},
+{0x00000002FFFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999CBuLL},
+{0x00000002FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000005uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000005uLL, 0x000000007FFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000000000008uLL},
+{0x00000002FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000005uLL},
+{0x00000002FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000002uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFBuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF9uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFDFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760BuLL},
+{0x00000002FFFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D7uLL},
+{0x00000002FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x00000002FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x00000002FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x00000002FFFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x00000002FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x00000002FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000002FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000002FFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x00000002FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000002FFFFFFFFuLL},
+{0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000300000000uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x0000000000000002uLL, 0x0000000180000000uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x0000000000000003uLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x0000000000000010uLL, 0x0000000030000000uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808464uLL},
+{0x0000000300000000uLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999CCuLL},
+{0x0000000300000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000006uLL},
+{0x0000000300000000uLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000000000009uLL},
+{0x0000000300000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000006uLL},
+{0x0000000300000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000003uLL},
+{0x0000000300000000uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0x0000000300000000uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFCuLL},
+{0x0000000300000000uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFAuLL},
+{0x0000000300000000uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE0uLL},
+{0x0000000300000000uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760CuLL},
+{0x0000000300000000uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D8uLL},
+{0x0000000300000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x0000000300000000uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0x0000000300000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x0000000300000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000300000000uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000300000000uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000300000000uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x0000000300000000uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x0000000300000000uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF0uLL},
+{0x0000000300000000uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB06uLL},
+{0x0000000300000000uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851ECuLL},
+{0x0000000300000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000300000000uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0000000300000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000300000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000300000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000300000000uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000300000000uLL, 0x0000000300000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000000uLL},
+{0x0000000300000001uLL, 0x0000000000000001uLL, 0x0000000300000001uLL, 0x0000000000000000uLL},
+{0x0000000300000001uLL, 0x0000000000000002uLL, 0x0000000180000000uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x0000000000000003uLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x0000000000000010uLL, 0x0000000030000000uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808465uLL},
+{0x0000000300000001uLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999CDuLL},
+{0x0000000300000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000007uLL},
+{0x0000000300000001uLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x000000000000000AuLL},
+{0x0000000300000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000007uLL},
+{0x0000000300000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000004uLL},
+{0x0000000300000001uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000300000001uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0x0000000300000001uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFBuLL},
+{0x0000000300000001uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE1uLL},
+{0x0000000300000001uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760DuLL},
+{0x0000000300000001uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D9uLL},
+{0x0000000300000001uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x0000000300000001uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000004uLL},
+{0x0000000300000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0x0000000300000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x0000000300000001uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000300000001uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000300000001uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000300000001uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x0000000300000001uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF1uLL},
+{0x0000000300000001uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB07uLL},
+{0x0000000300000001uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EDuLL},
+{0x0000000300000001uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000300000001uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000300000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000300000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000300000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000300000001uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000300000001uLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000300000001uLL, 0x0000000300000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000001uLL},
+{0x0000000300000002uLL, 0x0000000000000001uLL, 0x0000000300000002uLL, 0x0000000000000000uLL},
+{0x0000000300000002uLL, 0x0000000000000002uLL, 0x0000000180000001uLL, 0x0000000000000000uLL},
+{0x0000000300000002uLL, 0x0000000000000003uLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0x0000000300000002uLL, 0x0000000000000010uLL, 0x0000000030000000uLL, 0x0000000000000002uLL},
+{0x0000000300000002uLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808466uLL},
+{0x0000000300000002uLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999CEuLL},
+{0x0000000300000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000008uLL},
+{0x0000000300000002uLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x0000000000000002uLL},
+{0x0000000300000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x000000000000000BuLL},
+{0x0000000300000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000008uLL},
+{0x0000000300000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000005uLL},
+{0x0000000300000002uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000000000002uLL},
+{0x0000000300000002uLL, 0x0000000100000001uLL, 0x0000000000000002uLL, 0x0000000100000000uLL},
+{0x0000000300000002uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0x0000000300000002uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFCuLL},
+{0x0000000300000002uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE2uLL},
+{0x0000000300000002uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760EuLL},
+{0x0000000300000002uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3DAuLL},
+{0x0000000300000002uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0x0000000300000002uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x0000000300000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000005uLL},
+{0x0000000300000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000004uLL},
+{0x0000000300000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0x0000000300000002uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x0000000300000002uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000300000002uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000300000002uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000300000002uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF2uLL},
+{0x0000000300000002uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB08uLL},
+{0x0000000300000002uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EEuLL},
+{0x0000000300000002uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000300000002uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000300000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x0000000300000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000300000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000300000002uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000300000002uLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000300000002uLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000300000002uLL, 0x0000000300000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000002uLL},
+{0x0000000300000003uLL, 0x0000000000000001uLL, 0x0000000300000003uLL, 0x0000000000000000uLL},
+{0x0000000300000003uLL, 0x0000000000000002uLL, 0x0000000180000001uLL, 0x0000000000000001uLL},
+{0x0000000300000003uLL, 0x0000000000000003uLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x0000000300000003uLL, 0x0000000000000010uLL, 0x0000000030000000uLL, 0x0000000000000003uLL},
+{0x0000000300000003uLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808467uLL},
+{0x0000000300000003uLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999CFuLL},
+{0x0000000300000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000009uLL},
+{0x0000000300000003uLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x0000000000000003uLL},
+{0x0000000300000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x000000000000000CuLL},
+{0x0000000300000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000009uLL},
+{0x0000000300000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000006uLL},
+{0x0000000300000003uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000000000003uLL},
+{0x0000000300000003uLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x0000000000000000uLL},
+{0x0000000300000003uLL, 0x0000000100000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0x0000000300000003uLL, 0x0000000100000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0x0000000300000003uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE3uLL},
+{0x0000000300000003uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760FuLL},
+{0x0000000300000003uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3DBuLL},
+{0x0000000300000003uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0x0000000300000003uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x0000000300000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000006uLL},
+{0x0000000300000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000005uLL},
+{0x0000000300000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000004uLL},
+{0x0000000300000003uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0x0000000300000003uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x0000000300000003uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000300000003uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000300000003uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF3uLL},
+{0x0000000300000003uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB09uLL},
+{0x0000000300000003uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EFuLL},
+{0x0000000300000003uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000004uLL},
+{0x0000000300000003uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000300000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000006uLL},
+{0x0000000300000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x0000000300000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x0000000300000003uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000000300000003uLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000000300000003uLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000300000003uLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000300000003uLL, 0x0000000300000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000003uLL},
+{0x0000000300000010uLL, 0x0000000000000001uLL, 0x0000000300000010uLL, 0x0000000000000000uLL},
+{0x0000000300000010uLL, 0x0000000000000002uLL, 0x0000000180000008uLL, 0x0000000000000000uLL},
+{0x0000000300000010uLL, 0x0000000000000003uLL, 0x0000000100000005uLL, 0x0000000000000001uLL},
+{0x0000000300000010uLL, 0x0000000000000010uLL, 0x0000000030000001uLL, 0x0000000000000000uLL},
+{0x0000000300000010uLL, 0x00000000078644FAuLL, 0x0000000000000066uLL, 0x0000000000808474uLL},
+{0x0000000300000010uLL, 0x000000000747AE14uLL, 0x0000000000000069uLL, 0x00000000039999DCuLL},
+{0x0000000300000010uLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000000000016uLL},
+{0x0000000300000010uLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x0000000000000010uLL},
+{0x0000000300000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000000000019uLL},
+{0x0000000300000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000000000016uLL},
+{0x0000000300000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000000000013uLL},
+{0x0000000300000010uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000000000010uLL},
+{0x0000000300000010uLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x000000000000000DuLL},
+{0x0000000300000010uLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x000000000000000AuLL},
+{0x0000000300000010uLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x0000000000000007uLL},
+{0x0000000300000010uLL, 0x0000000100000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF0uLL},
+{0x0000000300000010uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3761CuLL},
+{0x0000000300000010uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3E8uLL},
+{0x0000000300000010uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000012uLL},
+{0x0000000300000010uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x0000000000000010uLL},
+{0x0000000300000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000013uLL},
+{0x0000000300000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000012uLL},
+{0x0000000300000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000011uLL},
+{0x0000000300000010uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000100000010uLL},
+{0x0000000300000010uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000010000000FuLL},
+{0x0000000300000010uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000010000000EuLL},
+{0x0000000300000010uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000010000000DuLL},
+{0x0000000300000010uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000300000010uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB16uLL},
+{0x0000000300000010uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851FCuLL},
+{0x0000000300000010uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000011uLL},
+{0x0000000300000010uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000080000010uLL},
+{0x0000000300000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000013uLL},
+{0x0000000300000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000012uLL},
+{0x0000000300000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000011uLL},
+{0x0000000300000010uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x0000000300000010uLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x0000000300000010uLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x0000000300000010uLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x0000000300000010uLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000300000010uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x0000000300000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000300000010uLL},
+{0x00000003078644FAuLL, 0x0000000000000001uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL},
+{0x00000003078644FAuLL, 0x0000000000000002uLL, 0x0000000183C3227DuLL, 0x0000000000000000uLL},
+{0x00000003078644FAuLL, 0x0000000000000003uLL, 0x00000001028216FEuLL, 0x0000000000000000uLL},
+{0x00000003078644FAuLL, 0x0000000000000010uLL, 0x000000003078644FuLL, 0x000000000000000AuLL},
+{0x00000003078644FAuLL, 0x00000000078644FAuLL, 0x0000000000000067uLL, 0x0000000000808464uLL},
+{0x00000003078644FAuLL, 0x000000000747AE14uLL, 0x000000000000006AuLL, 0x0000000003D830B2uLL},
+{0x00000003078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000007864500uLL},
+{0x00000003078644FAuLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x00000000078644FAuLL},
+{0x00000003078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000007864503uLL},
+{0x00000003078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000007864500uLL},
+{0x00000003078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x00000000078644FDuLL},
+{0x00000003078644FAuLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x00000000078644FAuLL},
+{0x00000003078644FAuLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x00000000078644F7uLL},
+{0x00000003078644FAuLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x00000000078644F4uLL},
+{0x00000003078644FAuLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x00000000078644F1uLL},
+{0x00000003078644FAuLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x00000000078644CAuLL},
+{0x00000003078644FAuLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F879BB06uLL},
+{0x00000003078644FAuLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F8F6E8D2uLL},
+{0x00000003078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x00000000078644FCuLL},
+{0x00000003078644FAuLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x00000000078644FAuLL},
+{0x00000003078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000001078644FDuLL},
+{0x00000003078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000001078644FCuLL},
+{0x00000003078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000001078644FBuLL},
+{0x00000003078644FAuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000001078644FAuLL},
+{0x00000003078644FAuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000001078644F9uLL},
+{0x00000003078644FAuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000001078644F8uLL},
+{0x00000003078644FAuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000001078644F7uLL},
+{0x00000003078644FAuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000001078644EAuLL},
+{0x00000003078644FAuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000003078644FAuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000001003E96E6uLL},
+{0x00000003078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x00000000878644FBuLL},
+{0x00000003078644FAuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x00000000878644FAuLL},
+{0x00000003078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000078644FDuLL},
+{0x00000003078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000078644FCuLL},
+{0x00000003078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000078644FBuLL},
+{0x00000003078644FAuLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x00000003078644FAuLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x00000003078644FAuLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x00000003078644FAuLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x00000003078644FAuLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x00000003078644FAuLL, 0x00000003078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000003078644FAuLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x00000003078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x00000003078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003078644FAuLL},
+{0x000000030747AE14uLL, 0x0000000000000001uLL, 0x000000030747AE14uLL, 0x0000000000000000uLL},
+{0x000000030747AE14uLL, 0x0000000000000002uLL, 0x0000000183A3D70AuLL, 0x0000000000000000uLL},
+{0x000000030747AE14uLL, 0x0000000000000003uLL, 0x00000001026D3A06uLL, 0x0000000000000002uLL},
+{0x000000030747AE14uLL, 0x0000000000000010uLL, 0x0000000030747AE1uLL, 0x0000000000000004uLL},
+{0x000000030747AE14uLL, 0x00000000078644FAuLL, 0x0000000000000067uLL, 0x000000000041ED7EuLL},
+{0x000000030747AE14uLL, 0x000000000747AE14uLL, 0x000000000000006AuLL, 0x00000000039999CCuLL},
+{0x000000030747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000000000006uLL, 0x000000000747AE1AuLL},
+{0x000000030747AE14uLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x000000000747AE14uLL},
+{0x000000030747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x000000000747AE1DuLL},
+{0x000000030747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x000000000747AE1AuLL},
+{0x000000030747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x000000000747AE17uLL},
+{0x000000030747AE14uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x000000000747AE14uLL},
+{0x000000030747AE14uLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x000000000747AE11uLL},
+{0x000000030747AE14uLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x000000000747AE0EuLL},
+{0x000000030747AE14uLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x000000000747AE0BuLL},
+{0x000000030747AE14uLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x000000000747ADE4uLL},
+{0x000000030747AE14uLL, 0x00000001078644FAuLL, 0x0000000000000002uLL, 0x00000000F83B2420uLL},
+{0x000000030747AE14uLL, 0x000000010747AE14uLL, 0x0000000000000002uLL, 0x00000000F8B851ECuLL},
+{0x000000030747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x000000000747AE16uLL},
+{0x000000030747AE14uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x000000000747AE14uLL},
+{0x000000030747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x000000010747AE17uLL},
+{0x000000030747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x000000010747AE16uLL},
+{0x000000030747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x000000010747AE15uLL},
+{0x000000030747AE14uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x000000010747AE14uLL},
+{0x000000030747AE14uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000010747AE13uLL},
+{0x000000030747AE14uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000010747AE12uLL},
+{0x000000030747AE14uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000010747AE11uLL},
+{0x000000030747AE14uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x000000010747AE04uLL},
+{0x000000030747AE14uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000000FFC1691AuLL},
+{0x000000030747AE14uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x000000030747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x000000008747AE15uLL},
+{0x000000030747AE14uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000008747AE14uLL},
+{0x000000030747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x000000000747AE17uLL},
+{0x000000030747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x000000000747AE16uLL},
+{0x000000030747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x000000000747AE15uLL},
+{0x000000030747AE14uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x000000030747AE14uLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x000000030747AE14uLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x000000030747AE14uLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x000000030747AE14uLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x000000030747AE14uLL, 0x00000003078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000030747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000030747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000030747AE14uLL},
+{0x000000037FFFFFFFuLL, 0x0000000000000001uLL, 0x000000037FFFFFFFuLL, 0x0000000000000000uLL},
+{0x000000037FFFFFFFuLL, 0x0000000000000002uLL, 0x00000001BFFFFFFFuLL, 0x0000000000000001uLL},
+{0x000000037FFFFFFFuLL, 0x0000000000000003uLL, 0x000000012AAAAAAAuLL, 0x0000000000000001uLL},
+{0x000000037FFFFFFFuLL, 0x0000000000000010uLL, 0x0000000037FFFFFFuLL, 0x000000000000000FuLL},
+{0x000000037FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000077uLL, 0x000000000095EFC9uLL},
+{0x000000037FFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000000007BuLL, 0x00000000008F5C63uLL},
+{0x000000037FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000007uLL, 0x0000000000000006uLL},
+{0x000000037FFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000006uLL, 0x000000007FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000080000008uLL},
+{0x000000037FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000080000005uLL},
+{0x000000037FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000080000002uLL},
+{0x000000037FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x000000007FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x000000007FFFFFFCuLL},
+{0x000000037FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x000000007FFFFFF9uLL},
+{0x000000037FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x000000007FFFFFF6uLL},
+{0x000000037FFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x000000007FFFFFCFuLL},
+{0x000000037FFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000003uLL, 0x00000000696D3111uLL},
+{0x000000037FFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000003uLL, 0x000000006A28F5C3uLL},
+{0x000000037FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000080000001uLL},
+{0x000000037FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000180000002uLL},
+{0x000000037FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000180000001uLL},
+{0x000000037FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0x000000037FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x000000037FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x000000037FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFCuLL},
+{0x000000037FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFEFuLL},
+{0x000000037FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB05uLL},
+{0x000000037FFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851EBuLL},
+{0x000000037FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x000000037FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x000000037FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x000000037FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x000000037FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x000000037FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x000000037FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x000000037FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x000000037FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x000000037FFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x000000037FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000037FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x000000037FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000037FFFFFFFuLL},
+{0x0000000380000000uLL, 0x0000000000000001uLL, 0x0000000380000000uLL, 0x0000000000000000uLL},
+{0x0000000380000000uLL, 0x0000000000000002uLL, 0x00000001C0000000uLL, 0x0000000000000000uLL},
+{0x0000000380000000uLL, 0x0000000000000003uLL, 0x000000012AAAAAAAuLL, 0x0000000000000002uLL},
+{0x0000000380000000uLL, 0x0000000000000010uLL, 0x0000000038000000uLL, 0x0000000000000000uLL},
+{0x0000000380000000uLL, 0x00000000078644FAuLL, 0x0000000000000077uLL, 0x000000000095EFCAuLL},
+{0x0000000380000000uLL, 0x000000000747AE14uLL, 0x000000000000007BuLL, 0x00000000008F5C64uLL},
+{0x0000000380000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000007uLL, 0x0000000000000007uLL},
+{0x0000000380000000uLL, 0x0000000080000000uLL, 0x0000000000000007uLL, 0x0000000000000000uLL},
+{0x0000000380000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000080000009uLL},
+{0x0000000380000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000080000006uLL},
+{0x0000000380000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000080000003uLL},
+{0x0000000380000000uLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x0000000080000000uLL},
+{0x0000000380000000uLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x000000007FFFFFFDuLL},
+{0x0000000380000000uLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x000000007FFFFFFAuLL},
+{0x0000000380000000uLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x000000007FFFFFF7uLL},
+{0x0000000380000000uLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x000000007FFFFFD0uLL},
+{0x0000000380000000uLL, 0x00000001078644FAuLL, 0x0000000000000003uLL, 0x00000000696D3112uLL},
+{0x0000000380000000uLL, 0x000000010747AE14uLL, 0x0000000000000003uLL, 0x000000006A28F5C4uLL},
+{0x0000000380000000uLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000080000002uLL},
+{0x0000000380000000uLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x0000000080000000uLL},
+{0x0000000380000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000180000003uLL},
+{0x0000000380000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000180000002uLL},
+{0x0000000380000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000001uLL},
+{0x0000000380000000uLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0x0000000380000000uLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x0000000380000000uLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x0000000380000000uLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x0000000380000000uLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFF0uLL},
+{0x0000000380000000uLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB06uLL},
+{0x0000000380000000uLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851ECuLL},
+{0x0000000380000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x0000000380000000uLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x0000000380000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x0000000380000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x0000000380000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x0000000380000000uLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0000000380000000uLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0000000380000000uLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0000000380000000uLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0000000380000000uLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x0000000380000000uLL, 0x00000003078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x0000000380000000uLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x0000000380000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000000380000000uLL, 0x0000000380000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000000380000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x0000000380000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000000380000000uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000000000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000000000003uLL, 0x0000000155555554uLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000003FFFFFFFuLL, 0x000000000000000DuLL},
+{0x00000003FFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000000000000088uLL, 0x0000000000AB5B2DuLL},
+{0x00000003FFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000000000008CuLL, 0x0000000004CCCD0DuLL},
+{0x00000003FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000000000008uLL, 0x0000000000000005uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000000000007uLL, 0x000000007FFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000004uLL, 0x0000000000000009uLL},
+{0x00000003FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000000000005uLL},
+{0x00000003FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x00000000FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x00000000FFFFFFFAuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x00000000FFFFFFF7uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x00000000FFFFFFF4uLL},
+{0x00000003FFFFFFFDuLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x00000000FFFFFFCDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000001078644FAuLL, 0x0000000000000003uLL, 0x00000000E96D310FuLL},
+{0x00000003FFFFFFFDuLL, 0x000000010747AE14uLL, 0x0000000000000003uLL, 0x00000000EA28F5C1uLL},
+{0x00000003FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x00000003FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFAuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB03uLL},
+{0x00000003FFFFFFFDuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851E9uLL},
+{0x00000003FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000003FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000003FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x00000003FFFFFFFDuLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x00000003FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000003FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFDuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000000000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000000000003uLL, 0x0000000155555554uLL, 0x0000000000000002uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000003FFFFFFFuLL, 0x000000000000000EuLL},
+{0x00000003FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000000000088uLL, 0x0000000000AB5B2EuLL},
+{0x00000003FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000000000008CuLL, 0x0000000004CCCD0EuLL},
+{0x00000003FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000008uLL, 0x0000000000000006uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000007uLL, 0x000000007FFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000000AuLL},
+{0x00000003FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000000000006uLL},
+{0x00000003FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000002uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x00000000FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x00000000FFFFFFFBuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x00000000FFFFFFF8uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x00000000FFFFFFF5uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x00000000FFFFFFCEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000001078644FAuLL, 0x0000000000000003uLL, 0x00000000E96D3110uLL},
+{0x00000003FFFFFFFEuLL, 0x000000010747AE14uLL, 0x0000000000000003uLL, 0x00000000EA28F5C2uLL},
+{0x00000003FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000100000000uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0x00000003FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0x00000003FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB04uLL},
+{0x00000003FFFFFFFEuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EAuLL},
+{0x00000003FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x00000003FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000003FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x00000003FFFFFFFEuLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x00000003FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000003FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFEuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000000000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000000000003uLL, 0x0000000155555555uLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000003FFFFFFFuLL, 0x000000000000000FuLL},
+{0x00000003FFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000088uLL, 0x0000000000AB5B2FuLL},
+{0x00000003FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000000008CuLL, 0x0000000004CCCD0FuLL},
+{0x00000003FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000008uLL, 0x0000000000000007uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000007uLL, 0x000000007FFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000000BuLL},
+{0x00000003FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000000000007uLL},
+{0x00000003FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000003uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000003uLL, 0x00000000FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000003uLL, 0x00000000FFFFFFFCuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000003uLL, 0x00000000FFFFFFF9uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000003uLL, 0x00000000FFFFFFF6uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000003uLL, 0x00000000FFFFFFCFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000003uLL, 0x00000000E96D3111uLL},
+{0x00000003FFFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000003uLL, 0x00000000EA28F5C3uLL},
+{0x00000003FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000100000001uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0x00000003FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0x00000003FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB05uLL},
+{0x00000003FFFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EBuLL},
+{0x00000003FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x00000003FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x00000003FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000003FFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x00000003FFFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x00000003FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x00000003FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x00000003FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000003FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000003FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x00000003FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000003FFFFFFFFuLL},
+{0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000001000000000uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x0000000000000002uLL, 0x0000000800000000uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x0000000000000003uLL, 0x0000000555555555uLL, 0x0000000000000001uLL},
+{0x0000001000000000uLL, 0x0000000000000010uLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x00000000078644FAuLL, 0x0000000000000220uLL, 0x0000000002AD6CC0uLL},
+{0x0000001000000000uLL, 0x000000000747AE14uLL, 0x0000000000000232uLL, 0x0000000004A3D818uLL},
+{0x0000001000000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x0000000000000020uLL},
+{0x0000001000000000uLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x0000000000000030uLL},
+{0x0000001000000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x0000000000000020uLL},
+{0x0000001000000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x0000000000000010uLL},
+{0x0000001000000000uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x0000000100000001uLL, 0x000000000000000FuLL, 0x00000000FFFFFFF1uLL},
+{0x0000001000000000uLL, 0x0000000100000002uLL, 0x000000000000000FuLL, 0x00000000FFFFFFE2uLL},
+{0x0000001000000000uLL, 0x0000000100000003uLL, 0x000000000000000FuLL, 0x00000000FFFFFFD3uLL},
+{0x0000001000000000uLL, 0x0000000100000010uLL, 0x000000000000000FuLL, 0x00000000FFFFFF10uLL},
+{0x0000001000000000uLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x000000008F21F55AuLL},
+{0x0000001000000000uLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x0000000092CCCCD4uLL},
+{0x0000001000000000uLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x000000010000000AuLL},
+{0x0000001000000000uLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x0000000100000000uLL},
+{0x0000001000000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000000000018uLL},
+{0x0000001000000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x0000000000000010uLL},
+{0x0000001000000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000000000008uLL},
+{0x0000001000000000uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x0000000200000001uLL, 0x0000000000000007uLL, 0x00000001FFFFFFF9uLL},
+{0x0000001000000000uLL, 0x0000000200000002uLL, 0x0000000000000007uLL, 0x00000001FFFFFFF2uLL},
+{0x0000001000000000uLL, 0x0000000200000003uLL, 0x0000000000000007uLL, 0x00000001FFFFFFEBuLL},
+{0x0000001000000000uLL, 0x0000000200000010uLL, 0x0000000000000007uLL, 0x00000001FFFFFF90uLL},
+{0x0000001000000000uLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001CB541D2AuLL},
+{0x0000001000000000uLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001CD0A3D74uLL},
+{0x0000001000000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000100000006uLL},
+{0x0000001000000000uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x0000000100000000uLL},
+{0x0000001000000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000010000000FuLL},
+{0x0000001000000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000010000000AuLL},
+{0x0000001000000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000100000005uLL},
+{0x0000001000000000uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x0000000100000000uLL},
+{0x0000001000000000uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000000FFFFFFFBuLL},
+{0x0000001000000000uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF6uLL},
+{0x0000001000000000uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF1uLL},
+{0x0000001000000000uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000000FFFFFFB0uLL},
+{0x0000001000000000uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000DA60A71EuLL},
+{0x0000001000000000uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000DB99999CuLL},
+{0x0000001000000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000200000004uLL},
+{0x0000001000000000uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x0000000200000000uLL},
+{0x0000001000000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000000CuLL},
+{0x0000001000000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000000000008uLL},
+{0x0000001000000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000004uLL},
+{0x0000001000000000uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000001000000000uLL, 0x0000001000000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000000uLL},
+{0x0000001000000001uLL, 0x0000000000000001uLL, 0x0000001000000001uLL, 0x0000000000000000uLL},
+{0x0000001000000001uLL, 0x0000000000000002uLL, 0x0000000800000000uLL, 0x0000000000000001uLL},
+{0x0000001000000001uLL, 0x0000000000000003uLL, 0x0000000555555555uLL, 0x0000000000000002uLL},
+{0x0000001000000001uLL, 0x0000000000000010uLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x0000001000000001uLL, 0x00000000078644FAuLL, 0x0000000000000220uLL, 0x0000000002AD6CC1uLL},
+{0x0000001000000001uLL, 0x000000000747AE14uLL, 0x0000000000000232uLL, 0x0000000004A3D819uLL},
+{0x0000001000000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x0000000000000021uLL},
+{0x0000001000000001uLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x0000000000000001uLL},
+{0x0000001000000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x0000000000000031uLL},
+{0x0000001000000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x0000000000000021uLL},
+{0x0000001000000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x0000000000000011uLL},
+{0x0000001000000001uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000000000001uLL},
+{0x0000001000000001uLL, 0x0000000100000001uLL, 0x000000000000000FuLL, 0x00000000FFFFFFF2uLL},
+{0x0000001000000001uLL, 0x0000000100000002uLL, 0x000000000000000FuLL, 0x00000000FFFFFFE3uLL},
+{0x0000001000000001uLL, 0x0000000100000003uLL, 0x000000000000000FuLL, 0x00000000FFFFFFD4uLL},
+{0x0000001000000001uLL, 0x0000000100000010uLL, 0x000000000000000FuLL, 0x00000000FFFFFF11uLL},
+{0x0000001000000001uLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x000000008F21F55BuLL},
+{0x0000001000000001uLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x0000000092CCCCD5uLL},
+{0x0000001000000001uLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x000000010000000BuLL},
+{0x0000001000000001uLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x0000000100000001uLL},
+{0x0000001000000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000000000019uLL},
+{0x0000001000000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x0000000000000011uLL},
+{0x0000001000000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000000000009uLL},
+{0x0000001000000001uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x0000000000000001uLL},
+{0x0000001000000001uLL, 0x0000000200000001uLL, 0x0000000000000007uLL, 0x00000001FFFFFFFAuLL},
+{0x0000001000000001uLL, 0x0000000200000002uLL, 0x0000000000000007uLL, 0x00000001FFFFFFF3uLL},
+{0x0000001000000001uLL, 0x0000000200000003uLL, 0x0000000000000007uLL, 0x00000001FFFFFFECuLL},
+{0x0000001000000001uLL, 0x0000000200000010uLL, 0x0000000000000007uLL, 0x00000001FFFFFF91uLL},
+{0x0000001000000001uLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001CB541D2BuLL},
+{0x0000001000000001uLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001CD0A3D75uLL},
+{0x0000001000000001uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000100000007uLL},
+{0x0000001000000001uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x0000000100000001uLL},
+{0x0000001000000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x0000000100000010uLL},
+{0x0000001000000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000010000000BuLL},
+{0x0000001000000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000100000006uLL},
+{0x0000001000000001uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x0000000100000001uLL},
+{0x0000001000000001uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000000FFFFFFFCuLL},
+{0x0000001000000001uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF7uLL},
+{0x0000001000000001uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF2uLL},
+{0x0000001000000001uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000000FFFFFFB1uLL},
+{0x0000001000000001uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000DA60A71FuLL},
+{0x0000001000000001uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000DB99999DuLL},
+{0x0000001000000001uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000200000005uLL},
+{0x0000001000000001uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x0000000200000001uLL},
+{0x0000001000000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000000DuLL},
+{0x0000001000000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000000000009uLL},
+{0x0000001000000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000005uLL},
+{0x0000001000000001uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000001000000001uLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000001000000001uLL, 0x0000001000000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000001uLL},
+{0x0000001000000002uLL, 0x0000000000000001uLL, 0x0000001000000002uLL, 0x0000000000000000uLL},
+{0x0000001000000002uLL, 0x0000000000000002uLL, 0x0000000800000001uLL, 0x0000000000000000uLL},
+{0x0000001000000002uLL, 0x0000000000000003uLL, 0x0000000555555556uLL, 0x0000000000000000uLL},
+{0x0000001000000002uLL, 0x0000000000000010uLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0x0000001000000002uLL, 0x00000000078644FAuLL, 0x0000000000000220uLL, 0x0000000002AD6CC2uLL},
+{0x0000001000000002uLL, 0x000000000747AE14uLL, 0x0000000000000232uLL, 0x0000000004A3D81AuLL},
+{0x0000001000000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x0000000000000022uLL},
+{0x0000001000000002uLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x0000000000000002uLL},
+{0x0000001000000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x0000000000000032uLL},
+{0x0000001000000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x0000000000000022uLL},
+{0x0000001000000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x0000000000000012uLL},
+{0x0000001000000002uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000000000002uLL},
+{0x0000001000000002uLL, 0x0000000100000001uLL, 0x000000000000000FuLL, 0x00000000FFFFFFF3uLL},
+{0x0000001000000002uLL, 0x0000000100000002uLL, 0x000000000000000FuLL, 0x00000000FFFFFFE4uLL},
+{0x0000001000000002uLL, 0x0000000100000003uLL, 0x000000000000000FuLL, 0x00000000FFFFFFD5uLL},
+{0x0000001000000002uLL, 0x0000000100000010uLL, 0x000000000000000FuLL, 0x00000000FFFFFF12uLL},
+{0x0000001000000002uLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x000000008F21F55CuLL},
+{0x0000001000000002uLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x0000000092CCCCD6uLL},
+{0x0000001000000002uLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x000000010000000CuLL},
+{0x0000001000000002uLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x0000000100000002uLL},
+{0x0000001000000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x000000000000001AuLL},
+{0x0000001000000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x0000000000000012uLL},
+{0x0000001000000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x000000000000000AuLL},
+{0x0000001000000002uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x0000000000000002uLL},
+{0x0000001000000002uLL, 0x0000000200000001uLL, 0x0000000000000007uLL, 0x00000001FFFFFFFBuLL},
+{0x0000001000000002uLL, 0x0000000200000002uLL, 0x0000000000000007uLL, 0x00000001FFFFFFF4uLL},
+{0x0000001000000002uLL, 0x0000000200000003uLL, 0x0000000000000007uLL, 0x00000001FFFFFFEDuLL},
+{0x0000001000000002uLL, 0x0000000200000010uLL, 0x0000000000000007uLL, 0x00000001FFFFFF92uLL},
+{0x0000001000000002uLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001CB541D2CuLL},
+{0x0000001000000002uLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001CD0A3D76uLL},
+{0x0000001000000002uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000100000008uLL},
+{0x0000001000000002uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x0000000100000002uLL},
+{0x0000001000000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x0000000100000011uLL},
+{0x0000001000000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000010000000CuLL},
+{0x0000001000000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000100000007uLL},
+{0x0000001000000002uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x0000000100000002uLL},
+{0x0000001000000002uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000000FFFFFFFDuLL},
+{0x0000001000000002uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF8uLL},
+{0x0000001000000002uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF3uLL},
+{0x0000001000000002uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000000FFFFFFB2uLL},
+{0x0000001000000002uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000DA60A720uLL},
+{0x0000001000000002uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000DB99999EuLL},
+{0x0000001000000002uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000200000006uLL},
+{0x0000001000000002uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x0000000200000002uLL},
+{0x0000001000000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000000EuLL},
+{0x0000001000000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x000000000000000AuLL},
+{0x0000001000000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000006uLL},
+{0x0000001000000002uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000001000000002uLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000001000000002uLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000001000000002uLL, 0x0000001000000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000002uLL},
+{0x0000001000000003uLL, 0x0000000000000001uLL, 0x0000001000000003uLL, 0x0000000000000000uLL},
+{0x0000001000000003uLL, 0x0000000000000002uLL, 0x0000000800000001uLL, 0x0000000000000001uLL},
+{0x0000001000000003uLL, 0x0000000000000003uLL, 0x0000000555555556uLL, 0x0000000000000001uLL},
+{0x0000001000000003uLL, 0x0000000000000010uLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0x0000001000000003uLL, 0x00000000078644FAuLL, 0x0000000000000220uLL, 0x0000000002AD6CC3uLL},
+{0x0000001000000003uLL, 0x000000000747AE14uLL, 0x0000000000000232uLL, 0x0000000004A3D81BuLL},
+{0x0000001000000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x0000000000000023uLL},
+{0x0000001000000003uLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x0000000000000003uLL},
+{0x0000001000000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x0000000000000033uLL},
+{0x0000001000000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x0000000000000023uLL},
+{0x0000001000000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x0000000000000013uLL},
+{0x0000001000000003uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000000000003uLL},
+{0x0000001000000003uLL, 0x0000000100000001uLL, 0x000000000000000FuLL, 0x00000000FFFFFFF4uLL},
+{0x0000001000000003uLL, 0x0000000100000002uLL, 0x000000000000000FuLL, 0x00000000FFFFFFE5uLL},
+{0x0000001000000003uLL, 0x0000000100000003uLL, 0x000000000000000FuLL, 0x00000000FFFFFFD6uLL},
+{0x0000001000000003uLL, 0x0000000100000010uLL, 0x000000000000000FuLL, 0x00000000FFFFFF13uLL},
+{0x0000001000000003uLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x000000008F21F55DuLL},
+{0x0000001000000003uLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x0000000092CCCCD7uLL},
+{0x0000001000000003uLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x000000010000000DuLL},
+{0x0000001000000003uLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x0000000100000003uLL},
+{0x0000001000000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x000000000000001BuLL},
+{0x0000001000000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x0000000000000013uLL},
+{0x0000001000000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x000000000000000BuLL},
+{0x0000001000000003uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x0000000000000003uLL},
+{0x0000001000000003uLL, 0x0000000200000001uLL, 0x0000000000000007uLL, 0x00000001FFFFFFFCuLL},
+{0x0000001000000003uLL, 0x0000000200000002uLL, 0x0000000000000007uLL, 0x00000001FFFFFFF5uLL},
+{0x0000001000000003uLL, 0x0000000200000003uLL, 0x0000000000000007uLL, 0x00000001FFFFFFEEuLL},
+{0x0000001000000003uLL, 0x0000000200000010uLL, 0x0000000000000007uLL, 0x00000001FFFFFF93uLL},
+{0x0000001000000003uLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001CB541D2DuLL},
+{0x0000001000000003uLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001CD0A3D77uLL},
+{0x0000001000000003uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000100000009uLL},
+{0x0000001000000003uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x0000000100000003uLL},
+{0x0000001000000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x0000000100000012uLL},
+{0x0000001000000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000010000000DuLL},
+{0x0000001000000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000100000008uLL},
+{0x0000001000000003uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x0000000100000003uLL},
+{0x0000001000000003uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000000FFFFFFFEuLL},
+{0x0000001000000003uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF9uLL},
+{0x0000001000000003uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000000FFFFFFF4uLL},
+{0x0000001000000003uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000000FFFFFFB3uLL},
+{0x0000001000000003uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000DA60A721uLL},
+{0x0000001000000003uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000DB99999FuLL},
+{0x0000001000000003uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000200000007uLL},
+{0x0000001000000003uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x0000000200000003uLL},
+{0x0000001000000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000000FuLL},
+{0x0000001000000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x000000000000000BuLL},
+{0x0000001000000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000007uLL},
+{0x0000001000000003uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0000001000000003uLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0000001000000003uLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000001000000003uLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000001000000003uLL, 0x0000001000000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000003uLL},
+{0x0000001000000010uLL, 0x0000000000000001uLL, 0x0000001000000010uLL, 0x0000000000000000uLL},
+{0x0000001000000010uLL, 0x0000000000000002uLL, 0x0000000800000008uLL, 0x0000000000000000uLL},
+{0x0000001000000010uLL, 0x0000000000000003uLL, 0x000000055555555AuLL, 0x0000000000000002uLL},
+{0x0000001000000010uLL, 0x0000000000000010uLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x0000001000000010uLL, 0x00000000078644FAuLL, 0x0000000000000220uLL, 0x0000000002AD6CD0uLL},
+{0x0000001000000010uLL, 0x000000000747AE14uLL, 0x0000000000000232uLL, 0x0000000004A3D828uLL},
+{0x0000001000000010uLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x0000000000000030uLL},
+{0x0000001000000010uLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x0000000000000010uLL},
+{0x0000001000000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x0000000000000040uLL},
+{0x0000001000000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x0000000000000030uLL},
+{0x0000001000000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x0000000000000020uLL},
+{0x0000001000000010uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000000000010uLL},
+{0x0000001000000010uLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x0000000000000000uLL},
+{0x0000001000000010uLL, 0x0000000100000002uLL, 0x000000000000000FuLL, 0x00000000FFFFFFF2uLL},
+{0x0000001000000010uLL, 0x0000000100000003uLL, 0x000000000000000FuLL, 0x00000000FFFFFFE3uLL},
+{0x0000001000000010uLL, 0x0000000100000010uLL, 0x000000000000000FuLL, 0x00000000FFFFFF20uLL},
+{0x0000001000000010uLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x000000008F21F56AuLL},
+{0x0000001000000010uLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x0000000092CCCCE4uLL},
+{0x0000001000000010uLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x000000010000001AuLL},
+{0x0000001000000010uLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x0000000100000010uLL},
+{0x0000001000000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000000000028uLL},
+{0x0000001000000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x0000000000000020uLL},
+{0x0000001000000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000000000018uLL},
+{0x0000001000000010uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x0000000000000010uLL},
+{0x0000001000000010uLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x0000000000000008uLL},
+{0x0000001000000010uLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x0000000000000000uLL},
+{0x0000001000000010uLL, 0x0000000200000003uLL, 0x0000000000000007uLL, 0x00000001FFFFFFFBuLL},
+{0x0000001000000010uLL, 0x0000000200000010uLL, 0x0000000000000007uLL, 0x00000001FFFFFFA0uLL},
+{0x0000001000000010uLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001CB541D3AuLL},
+{0x0000001000000010uLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001CD0A3D84uLL},
+{0x0000001000000010uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000100000016uLL},
+{0x0000001000000010uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x0000000100000010uLL},
+{0x0000001000000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000010000001FuLL},
+{0x0000001000000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000010000001AuLL},
+{0x0000001000000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000100000015uLL},
+{0x0000001000000010uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x0000000100000010uLL},
+{0x0000001000000010uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x000000010000000BuLL},
+{0x0000001000000010uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x0000000100000006uLL},
+{0x0000001000000010uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x0000000100000001uLL},
+{0x0000001000000010uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000000FFFFFFC0uLL},
+{0x0000001000000010uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000DA60A72EuLL},
+{0x0000001000000010uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000DB9999ACuLL},
+{0x0000001000000010uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000200000014uLL},
+{0x0000001000000010uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x0000000200000010uLL},
+{0x0000001000000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000000001CuLL},
+{0x0000001000000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000000000018uLL},
+{0x0000001000000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000000000014uLL},
+{0x0000001000000010uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x0000001000000010uLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x0000001000000010uLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x0000001000000010uLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x0000001000000010uLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000001000000010uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x0000001000000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001000000010uLL},
+{0x00000010078644FAuLL, 0x0000000000000001uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL},
+{0x00000010078644FAuLL, 0x0000000000000002uLL, 0x0000000803C3227DuLL, 0x0000000000000000uLL},
+{0x00000010078644FAuLL, 0x0000000000000003uLL, 0x0000000557D76C53uLL, 0x0000000000000001uLL},
+{0x00000010078644FAuLL, 0x0000000000000010uLL, 0x000000010078644FuLL, 0x000000000000000AuLL},
+{0x00000010078644FAuLL, 0x00000000078644FAuLL, 0x0000000000000221uLL, 0x0000000002AD6CC0uLL},
+{0x00000010078644FAuLL, 0x000000000747AE14uLL, 0x0000000000000233uLL, 0x0000000004E26EFEuLL},
+{0x00000010078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x000000000786451AuLL},
+{0x00000010078644FAuLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x00000000078644FAuLL},
+{0x00000010078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000000786452AuLL},
+{0x00000010078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000000786451AuLL},
+{0x00000010078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000000786450AuLL},
+{0x00000010078644FAuLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x00000000078644FAuLL},
+{0x00000010078644FAuLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x00000000078644EAuLL},
+{0x00000010078644FAuLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x00000000078644DAuLL},
+{0x00000010078644FAuLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x00000000078644CAuLL},
+{0x00000010078644FAuLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x00000000078643FAuLL},
+{0x00000010078644FAuLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x0000000096A83A54uLL},
+{0x00000010078644FAuLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x000000009A5311CEuLL},
+{0x00000010078644FAuLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x0000000107864504uLL},
+{0x00000010078644FAuLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x00000001078644FAuLL},
+{0x00000010078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000007864512uLL},
+{0x00000010078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x000000000786450AuLL},
+{0x00000010078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000007864502uLL},
+{0x00000010078644FAuLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x00000000078644FAuLL},
+{0x00000010078644FAuLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x00000000078644F2uLL},
+{0x00000010078644FAuLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x00000000078644EAuLL},
+{0x00000010078644FAuLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x00000000078644E2uLL},
+{0x00000010078644FAuLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x000000000786447AuLL},
+{0x00000010078644FAuLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001D2DA6224uLL},
+{0x00000010078644FAuLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001D490826EuLL},
+{0x00000010078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000107864500uLL},
+{0x00000010078644FAuLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x00000001078644FAuLL},
+{0x00000010078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x0000000107864509uLL},
+{0x00000010078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x0000000107864504uLL},
+{0x00000010078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x00000001078644FFuLL},
+{0x00000010078644FAuLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x00000001078644FAuLL},
+{0x00000010078644FAuLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000001078644F5uLL},
+{0x00000010078644FAuLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000001078644F0uLL},
+{0x00000010078644FAuLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000001078644EBuLL},
+{0x00000010078644FAuLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000001078644AAuLL},
+{0x00000010078644FAuLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000E1E6EC18uLL},
+{0x00000010078644FAuLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000E31FDE96uLL},
+{0x00000010078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x00000002078644FEuLL},
+{0x00000010078644FAuLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x00000002078644FAuLL},
+{0x00000010078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x0000000007864506uLL},
+{0x00000010078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000007864502uLL},
+{0x00000010078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x00000000078644FEuLL},
+{0x00000010078644FAuLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x00000010078644FAuLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x00000010078644FAuLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x00000010078644FAuLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x00000010078644FAuLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x00000010078644FAuLL, 0x00000010078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000010078644FAuLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x00000010078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x00000010078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010078644FAuLL},
+{0x000000100747AE14uLL, 0x0000000000000001uLL, 0x000000100747AE14uLL, 0x0000000000000000uLL},
+{0x000000100747AE14uLL, 0x0000000000000002uLL, 0x0000000803A3D70AuLL, 0x0000000000000000uLL},
+{0x000000100747AE14uLL, 0x0000000000000003uLL, 0x0000000557C28F5CuLL, 0x0000000000000000uLL},
+{0x000000100747AE14uLL, 0x0000000000000010uLL, 0x0000000100747AE1uLL, 0x0000000000000004uLL},
+{0x000000100747AE14uLL, 0x00000000078644FAuLL, 0x0000000000000221uLL, 0x00000000026ED5DAuLL},
+{0x000000100747AE14uLL, 0x000000000747AE14uLL, 0x0000000000000233uLL, 0x0000000004A3D818uLL},
+{0x000000100747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000000000020uLL, 0x000000000747AE34uLL},
+{0x000000100747AE14uLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x000000000747AE14uLL},
+{0x000000100747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000000747AE44uLL},
+{0x000000100747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000000747AE34uLL},
+{0x000000100747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000000747AE24uLL},
+{0x000000100747AE14uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x000000000747AE14uLL},
+{0x000000100747AE14uLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x000000000747AE04uLL},
+{0x000000100747AE14uLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x000000000747ADF4uLL},
+{0x000000100747AE14uLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x000000000747ADE4uLL},
+{0x000000100747AE14uLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x000000000747AD14uLL},
+{0x000000100747AE14uLL, 0x00000001078644FAuLL, 0x000000000000000FuLL, 0x000000009669A36EuLL},
+{0x000000100747AE14uLL, 0x000000010747AE14uLL, 0x000000000000000FuLL, 0x000000009A147AE8uLL},
+{0x000000100747AE14uLL, 0x000000017FFFFFFFuLL, 0x000000000000000AuLL, 0x000000010747AE1EuLL},
+{0x000000100747AE14uLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x000000010747AE14uLL},
+{0x000000100747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x000000000747AE2CuLL},
+{0x000000100747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x000000000747AE24uLL},
+{0x000000100747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x000000000747AE1CuLL},
+{0x000000100747AE14uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x000000000747AE14uLL},
+{0x000000100747AE14uLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x000000000747AE0CuLL},
+{0x000000100747AE14uLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x000000000747AE04uLL},
+{0x000000100747AE14uLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x000000000747ADFCuLL},
+{0x000000100747AE14uLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x000000000747AD94uLL},
+{0x000000100747AE14uLL, 0x00000002078644FAuLL, 0x0000000000000007uLL, 0x00000001D29BCB3EuLL},
+{0x000000100747AE14uLL, 0x000000020747AE14uLL, 0x0000000000000007uLL, 0x00000001D451EB88uLL},
+{0x000000100747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x000000010747AE1AuLL},
+{0x000000100747AE14uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x000000010747AE14uLL},
+{0x000000100747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000010747AE23uLL},
+{0x000000100747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000010747AE1EuLL},
+{0x000000100747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x000000010747AE19uLL},
+{0x000000100747AE14uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x000000010747AE14uLL},
+{0x000000100747AE14uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x000000010747AE0FuLL},
+{0x000000100747AE14uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x000000010747AE0AuLL},
+{0x000000100747AE14uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x000000010747AE05uLL},
+{0x000000100747AE14uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x000000010747ADC4uLL},
+{0x000000100747AE14uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000000E1A85532uLL},
+{0x000000100747AE14uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000000E2E147B0uLL},
+{0x000000100747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x000000020747AE18uLL},
+{0x000000100747AE14uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x000000020747AE14uLL},
+{0x000000100747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000000747AE20uLL},
+{0x000000100747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x000000000747AE1CuLL},
+{0x000000100747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x000000000747AE18uLL},
+{0x000000100747AE14uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x000000100747AE14uLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x000000100747AE14uLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x000000100747AE14uLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x000000100747AE14uLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x000000100747AE14uLL, 0x00000010078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000100747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000100747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000100747AE14uLL},
+{0x000000107FFFFFFFuLL, 0x0000000000000001uLL, 0x000000107FFFFFFFuLL, 0x0000000000000000uLL},
+{0x000000107FFFFFFFuLL, 0x0000000000000002uLL, 0x000000083FFFFFFFuLL, 0x0000000000000001uLL},
+{0x000000107FFFFFFFuLL, 0x0000000000000003uLL, 0x000000057FFFFFFFuLL, 0x0000000000000002uLL},
+{0x000000107FFFFFFFuLL, 0x0000000000000010uLL, 0x0000000107FFFFFFuLL, 0x000000000000000FuLL},
+{0x000000107FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000231uLL, 0x0000000002C2D825uLL},
+{0x000000107FFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000244uLL, 0x0000000001999AAFuLL},
+{0x000000107FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000021uLL, 0x0000000000000020uLL},
+{0x000000107FFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000020uLL, 0x000000007FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000008000002FuLL},
+{0x000000107FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000008000001FuLL},
+{0x000000107FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000008000000FuLL},
+{0x000000107FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x000000007FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x000000007FFFFFEFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x000000007FFFFFDFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x000000007FFFFFCFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x000000007FFFFEFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000010uLL, 0x00000000079BB05FuLL},
+{0x000000107FFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000010uLL, 0x000000000B851EBFuLL},
+{0x000000107FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x000000000000000BuLL, 0x000000000000000AuLL},
+{0x000000107FFFFFFFuLL, 0x0000000180000000uLL, 0x000000000000000AuLL, 0x000000017FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000080000017uLL},
+{0x000000107FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x000000008000000FuLL},
+{0x000000107FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000080000007uLL},
+{0x000000107FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x000000007FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x000000007FFFFFF7uLL},
+{0x000000107FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x000000007FFFFFEFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x000000007FFFFFE7uLL},
+{0x000000107FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x000000007FFFFF7FuLL},
+{0x000000107FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000008uLL, 0x0000000043CDD82FuLL},
+{0x000000107FFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000008uLL, 0x0000000045C28F5FuLL},
+{0x000000107FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000180000005uLL},
+{0x000000107FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x000000017FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000018000000EuLL},
+{0x000000107FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x0000000180000009uLL},
+{0x000000107FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000180000004uLL},
+{0x000000107FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x000000017FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x000000017FFFFFFAuLL},
+{0x000000107FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x000000017FFFFFF5uLL},
+{0x000000107FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x000000017FFFFFF0uLL},
+{0x000000107FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x000000017FFFFFAFuLL},
+{0x000000107FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x000000015A60A71DuLL},
+{0x000000107FFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x000000015B99999BuLL},
+{0x000000107FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000280000003uLL},
+{0x000000107FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x000000027FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000008000000BuLL},
+{0x000000107FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000080000007uLL},
+{0x000000107FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000080000003uLL},
+{0x000000107FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x000000107FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x000000107FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x000000107FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x000000107FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x000000107FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x000000107FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x000000107FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x000000107FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x000000107FFFFFFFuLL},
+{0x0000001080000000uLL, 0x0000000000000001uLL, 0x0000001080000000uLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x0000000000000002uLL, 0x0000000840000000uLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x0000000000000003uLL, 0x0000000580000000uLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x0000000000000010uLL, 0x0000000108000000uLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x00000000078644FAuLL, 0x0000000000000231uLL, 0x0000000002C2D826uLL},
+{0x0000001080000000uLL, 0x000000000747AE14uLL, 0x0000000000000244uLL, 0x0000000001999AB0uLL},
+{0x0000001080000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000021uLL, 0x0000000000000021uLL},
+{0x0000001080000000uLL, 0x0000000080000000uLL, 0x0000000000000021uLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x0000000080000030uLL},
+{0x0000001080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x0000000080000020uLL},
+{0x0000001080000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x0000000080000010uLL},
+{0x0000001080000000uLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x0000000080000000uLL},
+{0x0000001080000000uLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x000000007FFFFFF0uLL},
+{0x0000001080000000uLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x000000007FFFFFE0uLL},
+{0x0000001080000000uLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x000000007FFFFFD0uLL},
+{0x0000001080000000uLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x000000007FFFFF00uLL},
+{0x0000001080000000uLL, 0x00000001078644FAuLL, 0x0000000000000010uLL, 0x00000000079BB060uLL},
+{0x0000001080000000uLL, 0x000000010747AE14uLL, 0x0000000000000010uLL, 0x000000000B851EC0uLL},
+{0x0000001080000000uLL, 0x000000017FFFFFFFuLL, 0x000000000000000BuLL, 0x000000000000000BuLL},
+{0x0000001080000000uLL, 0x0000000180000000uLL, 0x000000000000000BuLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000080000018uLL},
+{0x0000001080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x0000000080000010uLL},
+{0x0000001080000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000080000008uLL},
+{0x0000001080000000uLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x0000000080000000uLL},
+{0x0000001080000000uLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x000000007FFFFFF8uLL},
+{0x0000001080000000uLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x000000007FFFFFF0uLL},
+{0x0000001080000000uLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x000000007FFFFFE8uLL},
+{0x0000001080000000uLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x000000007FFFFF80uLL},
+{0x0000001080000000uLL, 0x00000002078644FAuLL, 0x0000000000000008uLL, 0x0000000043CDD830uLL},
+{0x0000001080000000uLL, 0x000000020747AE14uLL, 0x0000000000000008uLL, 0x0000000045C28F60uLL},
+{0x0000001080000000uLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000180000006uLL},
+{0x0000001080000000uLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x0000000180000000uLL},
+{0x0000001080000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000018000000FuLL},
+{0x0000001080000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x000000018000000AuLL},
+{0x0000001080000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000180000005uLL},
+{0x0000001080000000uLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x0000000180000000uLL},
+{0x0000001080000000uLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x000000017FFFFFFBuLL},
+{0x0000001080000000uLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x000000017FFFFFF6uLL},
+{0x0000001080000000uLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x000000017FFFFFF1uLL},
+{0x0000001080000000uLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x000000017FFFFFB0uLL},
+{0x0000001080000000uLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x000000015A60A71EuLL},
+{0x0000001080000000uLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x000000015B99999CuLL},
+{0x0000001080000000uLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000280000004uLL},
+{0x0000001080000000uLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x0000000280000000uLL},
+{0x0000001080000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000008000000CuLL},
+{0x0000001080000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000080000008uLL},
+{0x0000001080000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000080000004uLL},
+{0x0000001080000000uLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0000001080000000uLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0000001080000000uLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0000001080000000uLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0000001080000000uLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x0000001080000000uLL, 0x00000010078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x0000001080000000uLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x0000001080000000uLL, 0x000000107FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0000001080000000uLL, 0x0000001080000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0000001080000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x0000001080000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0000001080000000uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000000000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000000000002uLL, 0x000000087FFFFFFEuLL, 0x0000000000000001uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000000000003uLL, 0x00000005AAAAAAA9uLL, 0x0000000000000002uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000000000010uLL, 0x000000010FFFFFFFuLL, 0x000000000000000DuLL},
+{0x00000010FFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000000000000242uLL, 0x0000000002D84389uLL},
+{0x00000010FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000000000255uLL, 0x0000000005D70B59uLL},
+{0x00000010FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000000000022uLL, 0x000000000000001FuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000000000021uLL, 0x000000007FFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000011uLL, 0x0000000000000030uLL},
+{0x00000010FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000011uLL, 0x000000000000001FuLL},
+{0x00000010FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000011uLL, 0x000000000000000EuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x00000000FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x00000000FFFFFFEDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x00000000FFFFFFDDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x00000000FFFFFFCDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x00000000FFFFFEFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000001078644FAuLL, 0x0000000000000010uLL, 0x00000000879BB05DuLL},
+{0x00000010FFFFFFFDuLL, 0x000000010747AE14uLL, 0x0000000000000010uLL, 0x000000008B851EBDuLL},
+{0x00000010FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x000000000000000BuLL, 0x0000000080000008uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000180000000uLL, 0x000000000000000BuLL, 0x000000007FFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000100000015uLL},
+{0x00000010FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x000000010000000DuLL},
+{0x00000010FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000100000005uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x00000000FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x00000000FFFFFFF5uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x00000000FFFFFFEDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x00000000FFFFFFE5uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x00000000FFFFFF7DuLL},
+{0x00000010FFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000000000008uLL, 0x00000000C3CDD82DuLL},
+{0x00000010FFFFFFFDuLL, 0x000000020747AE14uLL, 0x0000000000000008uLL, 0x00000000C5C28F5DuLL},
+{0x00000010FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000200000003uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x00000001FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000020000000CuLL},
+{0x00000010FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x0000000200000007uLL},
+{0x00000010FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000200000002uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x00000001FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000001FFFFFFF8uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000001FFFFFFF3uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000001FFFFFFEEuLL},
+{0x00000010FFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000001FFFFFFADuLL},
+{0x00000010FFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000001DA60A71BuLL},
+{0x00000010FFFFFFFDuLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000001DB999999uLL},
+{0x00000010FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000300000001uLL},
+{0x00000010FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x00000002FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x0000000100000009uLL},
+{0x00000010FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000100000005uLL},
+{0x00000010FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000100000001uLL},
+{0x00000010FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000010FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000010FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x00000010FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x00000010FFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x00000010FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000010FFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFDuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000000000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000000000002uLL, 0x000000087FFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000000000003uLL, 0x00000005AAAAAAAAuLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000000000010uLL, 0x000000010FFFFFFFuLL, 0x000000000000000EuLL},
+{0x00000010FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000000000242uLL, 0x0000000002D8438AuLL},
+{0x00000010FFFFFFFEuLL, 0x000000000747AE14uLL, 0x0000000000000255uLL, 0x0000000005D70B5AuLL},
+{0x00000010FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000022uLL, 0x0000000000000020uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000021uLL, 0x000000007FFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000011uLL, 0x0000000000000031uLL},
+{0x00000010FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000011uLL, 0x0000000000000020uLL},
+{0x00000010FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000011uLL, 0x000000000000000FuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x00000000FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x00000000FFFFFFEEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x00000000FFFFFFDEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x00000000FFFFFFCEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x00000000FFFFFEFEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000001078644FAuLL, 0x0000000000000010uLL, 0x00000000879BB05EuLL},
+{0x00000010FFFFFFFEuLL, 0x000000010747AE14uLL, 0x0000000000000010uLL, 0x000000008B851EBEuLL},
+{0x00000010FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x000000000000000BuLL, 0x0000000080000009uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000180000000uLL, 0x000000000000000BuLL, 0x000000007FFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000100000016uLL},
+{0x00000010FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x000000010000000EuLL},
+{0x00000010FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000100000006uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x00000000FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x00000000FFFFFFF6uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x00000000FFFFFFEEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x00000000FFFFFFE6uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x00000000FFFFFF7EuLL},
+{0x00000010FFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000000000008uLL, 0x00000000C3CDD82EuLL},
+{0x00000010FFFFFFFEuLL, 0x000000020747AE14uLL, 0x0000000000000008uLL, 0x00000000C5C28F5EuLL},
+{0x00000010FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000200000004uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x00000001FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000020000000DuLL},
+{0x00000010FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x0000000200000008uLL},
+{0x00000010FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000200000003uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x00000001FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000001FFFFFFF9uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000001FFFFFFF4uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000001FFFFFFEFuLL},
+{0x00000010FFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000001FFFFFFAEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000001DA60A71CuLL},
+{0x00000010FFFFFFFEuLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000001DB99999AuLL},
+{0x00000010FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000300000002uLL},
+{0x00000010FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x00000002FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000010000000AuLL},
+{0x00000010FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000100000006uLL},
+{0x00000010FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000100000002uLL},
+{0x00000010FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000010FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000010FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x00000010FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x00000010FFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x00000010FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000010FFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000010FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFEuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000000000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000000000002uLL, 0x000000087FFFFFFFuLL, 0x0000000000000001uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000000000003uLL, 0x00000005AAAAAAAAuLL, 0x0000000000000001uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000000000010uLL, 0x000000010FFFFFFFuLL, 0x000000000000000FuLL},
+{0x00000010FFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000000000242uLL, 0x0000000002D8438BuLL},
+{0x00000010FFFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000000000255uLL, 0x0000000005D70B5BuLL},
+{0x00000010FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000000000022uLL, 0x0000000000000021uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000021uLL, 0x000000007FFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000000000011uLL, 0x0000000000000032uLL},
+{0x00000010FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000011uLL, 0x0000000000000021uLL},
+{0x00000010FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000011uLL, 0x0000000000000010uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000010uLL, 0x00000000FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000010uLL, 0x00000000FFFFFFEFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000010uLL, 0x00000000FFFFFFDFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000010uLL, 0x00000000FFFFFFCFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000100000010uLL, 0x0000000000000010uLL, 0x00000000FFFFFEFFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000000000010uLL, 0x00000000879BB05FuLL},
+{0x00000010FFFFFFFFuLL, 0x000000010747AE14uLL, 0x0000000000000010uLL, 0x000000008B851EBFuLL},
+{0x00000010FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x000000000000000BuLL, 0x000000008000000AuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000180000000uLL, 0x000000000000000BuLL, 0x000000007FFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000000000008uLL, 0x0000000100000017uLL},
+{0x00000010FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000008uLL, 0x000000010000000FuLL},
+{0x00000010FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000000000008uLL, 0x0000000100000007uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000008uLL, 0x00000000FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000008uLL, 0x00000000FFFFFFF7uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000008uLL, 0x00000000FFFFFFEFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000008uLL, 0x00000000FFFFFFE7uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000000000008uLL, 0x00000000FFFFFF7FuLL},
+{0x00000010FFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000000000008uLL, 0x00000000C3CDD82FuLL},
+{0x00000010FFFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000000000008uLL, 0x00000000C5C28F5FuLL},
+{0x00000010FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000000000006uLL, 0x0000000200000005uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000000000006uLL, 0x00000001FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000000000005uLL, 0x000000020000000EuLL},
+{0x00000010FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000000000005uLL, 0x0000000200000009uLL},
+{0x00000010FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000000000005uLL, 0x0000000200000004uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000000000005uLL, 0x00000001FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000000000005uLL, 0x00000001FFFFFFFAuLL},
+{0x00000010FFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000000000005uLL, 0x00000001FFFFFFF5uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000000000005uLL, 0x00000001FFFFFFF0uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000000000005uLL, 0x00000001FFFFFFAFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000000000005uLL, 0x00000001DA60A71DuLL},
+{0x00000010FFFFFFFFuLL, 0x000000030747AE14uLL, 0x0000000000000005uLL, 0x00000001DB99999BuLL},
+{0x00000010FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000000000004uLL, 0x0000000300000003uLL},
+{0x00000010FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000000000004uLL, 0x00000002FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000000000004uLL, 0x000000010000000BuLL},
+{0x00000010FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000000000004uLL, 0x0000000100000007uLL},
+{0x00000010FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000000000004uLL, 0x0000000100000003uLL},
+{0x00000010FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x00000010FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x00000010FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x00000010FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x00000010FFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x00000010FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x00000010FFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x00000010FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x00000010FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x00000010FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x00000010FFFFFFFFuLL},
+{0x078644FA00000000uLL, 0x0000000000000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x0000000000000002uLL, 0x03C3227D00000000uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x0000000000000003uLL, 0x028216FE00000000uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x0000000000000010uLL, 0x0078644FA0000000uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x00000000078644FAuLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x000000000747AE14uLL, 0x000000010898F295uLL, 0x0000000004D8C65CuLL},
+{0x078644FA00000000uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x000000000F0C89F4uLL},
+{0x078644FA00000000uLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001692CEEEuLL},
+{0x078644FA00000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000000F0C89F4uLL},
+{0x078644FA00000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000078644FAuLL},
+{0x078644FA00000000uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x0000000100000001uLL, 0x00000000078644F9uLL, 0x00000000F879BB07uLL},
+{0x078644FA00000000uLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F0F3760EuLL},
+{0x078644FA00000000uLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000E96D3115uLL},
+{0x078644FA00000000uLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x00000000879BB070uLL},
+{0x078644FA00000000uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x000000006C09ACD2uLL},
+{0x078644FA00000000uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000082B63E28uLL},
+{0x078644FA00000000uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000005042DFCuLL},
+{0x078644FA00000000uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000000B496777uLL},
+{0x078644FA00000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000000078644FAuLL},
+{0x078644FA00000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000003C3227DuLL},
+{0x078644FA00000000uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x0000000200000001uLL, 0x0000000003C3227CuLL, 0x00000001FC3CDD84uLL},
+{0x078644FA00000000uLL, 0x0000000200000002uLL, 0x0000000003C3227CuLL, 0x00000001F879BB08uLL},
+{0x078644FA00000000uLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001F4B6988CuLL},
+{0x078644FA00000000uLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001C3CDD840uLL},
+{0x078644FA00000000uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000181754582uLL},
+{0x078644FA00000000uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x000000019B4CF184uLL},
+{0x078644FA00000000uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x00000001830281FDuLL},
+{0x078644FA00000000uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x0000000180000000uLL},
+{0x078644FA00000000uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000000078644FAuLL},
+{0x078644FA00000000uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000005042DFCuLL},
+{0x078644FA00000000uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000000028216FEuLL},
+{0x078644FA00000000uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x0000000300000001uLL, 0x00000000028216FDuLL, 0x00000002FD7DE903uLL},
+{0x078644FA00000000uLL, 0x0000000300000002uLL, 0x00000000028216FDuLL, 0x00000002FAFBD206uLL},
+{0x078644FA00000000uLL, 0x0000000300000003uLL, 0x00000000028216FDuLL, 0x00000002F879BB09uLL},
+{0x078644FA00000000uLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002D7DE9030uLL},
+{0x078644FA00000000uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x0000000266ACEAE4uLL},
+{0x078644FA00000000uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000CC648250uLL},
+{0x078644FA00000000uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000282265CD9uLL},
+{0x078644FA00000000uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x0000000280000000uLL},
+{0x078644FA00000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000205A4B3BAuLL},
+{0x078644FA00000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000203C3227CuLL},
+{0x078644FA00000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000201E1913EuLL},
+{0x078644FA00000000uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A00000000uLL},
+{0x078644FA00000000uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x00000009FF879BB1uLL},
+{0x078644FA00000000uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x00000009FF0F3762uLL},
+{0x078644FA00000000uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x00000009FE96D313uLL},
+{0x078644FA00000000uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x00000009F879BB10uLL},
+{0x078644FA00000000uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000001E3B0AC8uLL},
+{0x078644FA00000000uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000438F2016CuLL},
+{0x078644FA00000000uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C0074BE5CuLL},
+{0x078644FA00000000uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C00000000uLL},
+{0x078644FA00000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000000153EE0EuLL},
+{0x078644FA00000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000000E29EB4uLL},
+{0x078644FA00000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000000714F5AuLL},
+{0x078644FA00000000uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA00000000uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFFuLL},
+{0x078644FA00000000uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFEuLL},
+{0x078644FA00000000uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFDuLL},
+{0x078644FA00000000uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFF0uLL},
+{0x078644FA00000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E5F879BB06uLL},
+{0x078644FA00000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E5F8B851ECuLL},
+{0x078644FA00000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000001uLL},
+{0x078644FA00000000uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E580000000uLL},
+{0x078644FA00000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E500000003uLL},
+{0x078644FA00000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E500000002uLL},
+{0x078644FA00000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E500000001uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000000uLL},
+{0x078644FA00000001uLL, 0x0000000000000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000001uLL, 0x0000000000000002uLL, 0x03C3227D00000000uLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x0000000000000003uLL, 0x028216FE00000000uLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x0000000000000010uLL, 0x0078644FA0000000uLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x00000000078644FAuLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x000000000747AE14uLL, 0x000000010898F295uLL, 0x0000000004D8C65DuLL},
+{0x078644FA00000001uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x000000000F0C89F5uLL},
+{0x078644FA00000001uLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001692CEEFuLL},
+{0x078644FA00000001uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000000F0C89F5uLL},
+{0x078644FA00000001uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000078644FBuLL},
+{0x078644FA00000001uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x0000000100000001uLL, 0x00000000078644F9uLL, 0x00000000F879BB08uLL},
+{0x078644FA00000001uLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F0F3760FuLL},
+{0x078644FA00000001uLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000E96D3116uLL},
+{0x078644FA00000001uLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x00000000879BB071uLL},
+{0x078644FA00000001uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x000000006C09ACD3uLL},
+{0x078644FA00000001uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000082B63E29uLL},
+{0x078644FA00000001uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000005042DFDuLL},
+{0x078644FA00000001uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000000B496778uLL},
+{0x078644FA00000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000000078644FBuLL},
+{0x078644FA00000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000003C3227EuLL},
+{0x078644FA00000001uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x0000000200000001uLL, 0x0000000003C3227CuLL, 0x00000001FC3CDD85uLL},
+{0x078644FA00000001uLL, 0x0000000200000002uLL, 0x0000000003C3227CuLL, 0x00000001F879BB09uLL},
+{0x078644FA00000001uLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001F4B6988DuLL},
+{0x078644FA00000001uLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001C3CDD841uLL},
+{0x078644FA00000001uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000181754583uLL},
+{0x078644FA00000001uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x000000019B4CF185uLL},
+{0x078644FA00000001uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x00000001830281FEuLL},
+{0x078644FA00000001uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x0000000180000001uLL},
+{0x078644FA00000001uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000000078644FBuLL},
+{0x078644FA00000001uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000005042DFDuLL},
+{0x078644FA00000001uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000000028216FFuLL},
+{0x078644FA00000001uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x0000000300000001uLL, 0x00000000028216FDuLL, 0x00000002FD7DE904uLL},
+{0x078644FA00000001uLL, 0x0000000300000002uLL, 0x00000000028216FDuLL, 0x00000002FAFBD207uLL},
+{0x078644FA00000001uLL, 0x0000000300000003uLL, 0x00000000028216FDuLL, 0x00000002F879BB0AuLL},
+{0x078644FA00000001uLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002D7DE9031uLL},
+{0x078644FA00000001uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x0000000266ACEAE5uLL},
+{0x078644FA00000001uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000CC648251uLL},
+{0x078644FA00000001uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000282265CDAuLL},
+{0x078644FA00000001uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x0000000280000001uLL},
+{0x078644FA00000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000205A4B3BBuLL},
+{0x078644FA00000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000203C3227DuLL},
+{0x078644FA00000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000201E1913FuLL},
+{0x078644FA00000001uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A00000001uLL},
+{0x078644FA00000001uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x00000009FF879BB2uLL},
+{0x078644FA00000001uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x00000009FF0F3763uLL},
+{0x078644FA00000001uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x00000009FE96D314uLL},
+{0x078644FA00000001uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x00000009F879BB11uLL},
+{0x078644FA00000001uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000001E3B0AC9uLL},
+{0x078644FA00000001uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000438F2016DuLL},
+{0x078644FA00000001uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C0074BE5DuLL},
+{0x078644FA00000001uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C00000001uLL},
+{0x078644FA00000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000000153EE0FuLL},
+{0x078644FA00000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000000E29EB5uLL},
+{0x078644FA00000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000000714F5BuLL},
+{0x078644FA00000001uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x078644FA00000001uLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E600000001uLL},
+{0x078644FA00000001uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA00000001uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFFuLL},
+{0x078644FA00000001uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFEuLL},
+{0x078644FA00000001uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFF1uLL},
+{0x078644FA00000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E5F879BB07uLL},
+{0x078644FA00000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E5F8B851EDuLL},
+{0x078644FA00000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000002uLL},
+{0x078644FA00000001uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E580000001uLL},
+{0x078644FA00000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E500000004uLL},
+{0x078644FA00000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E500000003uLL},
+{0x078644FA00000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E500000002uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000001uLL},
+{0x078644FA00000002uLL, 0x0000000000000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL},
+{0x078644FA00000002uLL, 0x0000000000000002uLL, 0x03C3227D00000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000002uLL, 0x0000000000000003uLL, 0x028216FE00000000uLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x0000000000000010uLL, 0x0078644FA0000000uLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x00000000078644FAuLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x000000000747AE14uLL, 0x000000010898F295uLL, 0x0000000004D8C65EuLL},
+{0x078644FA00000002uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x000000000F0C89F6uLL},
+{0x078644FA00000002uLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001692CEF0uLL},
+{0x078644FA00000002uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000000F0C89F6uLL},
+{0x078644FA00000002uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000078644FCuLL},
+{0x078644FA00000002uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x0000000100000001uLL, 0x00000000078644F9uLL, 0x00000000F879BB09uLL},
+{0x078644FA00000002uLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F0F37610uLL},
+{0x078644FA00000002uLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000E96D3117uLL},
+{0x078644FA00000002uLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x00000000879BB072uLL},
+{0x078644FA00000002uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x000000006C09ACD4uLL},
+{0x078644FA00000002uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000082B63E2AuLL},
+{0x078644FA00000002uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000005042DFEuLL},
+{0x078644FA00000002uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000000B496779uLL},
+{0x078644FA00000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000000078644FCuLL},
+{0x078644FA00000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000003C3227FuLL},
+{0x078644FA00000002uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x0000000200000001uLL, 0x0000000003C3227CuLL, 0x00000001FC3CDD86uLL},
+{0x078644FA00000002uLL, 0x0000000200000002uLL, 0x0000000003C3227CuLL, 0x00000001F879BB0AuLL},
+{0x078644FA00000002uLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001F4B6988EuLL},
+{0x078644FA00000002uLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001C3CDD842uLL},
+{0x078644FA00000002uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000181754584uLL},
+{0x078644FA00000002uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x000000019B4CF186uLL},
+{0x078644FA00000002uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x00000001830281FFuLL},
+{0x078644FA00000002uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x0000000180000002uLL},
+{0x078644FA00000002uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000000078644FCuLL},
+{0x078644FA00000002uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000005042DFEuLL},
+{0x078644FA00000002uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x0000000002821700uLL},
+{0x078644FA00000002uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x0000000300000001uLL, 0x00000000028216FDuLL, 0x00000002FD7DE905uLL},
+{0x078644FA00000002uLL, 0x0000000300000002uLL, 0x00000000028216FDuLL, 0x00000002FAFBD208uLL},
+{0x078644FA00000002uLL, 0x0000000300000003uLL, 0x00000000028216FDuLL, 0x00000002F879BB0BuLL},
+{0x078644FA00000002uLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002D7DE9032uLL},
+{0x078644FA00000002uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x0000000266ACEAE6uLL},
+{0x078644FA00000002uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000CC648252uLL},
+{0x078644FA00000002uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000282265CDBuLL},
+{0x078644FA00000002uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x0000000280000002uLL},
+{0x078644FA00000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000205A4B3BCuLL},
+{0x078644FA00000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000203C3227EuLL},
+{0x078644FA00000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000201E19140uLL},
+{0x078644FA00000002uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A00000002uLL},
+{0x078644FA00000002uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x00000009FF879BB3uLL},
+{0x078644FA00000002uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x00000009FF0F3764uLL},
+{0x078644FA00000002uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x00000009FE96D315uLL},
+{0x078644FA00000002uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x00000009F879BB12uLL},
+{0x078644FA00000002uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000001E3B0ACAuLL},
+{0x078644FA00000002uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000438F2016EuLL},
+{0x078644FA00000002uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C0074BE5EuLL},
+{0x078644FA00000002uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C00000002uLL},
+{0x078644FA00000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000000153EE10uLL},
+{0x078644FA00000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000000E29EB6uLL},
+{0x078644FA00000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000000714F5CuLL},
+{0x078644FA00000002uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x078644FA00000002uLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x078644FA00000002uLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E600000002uLL},
+{0x078644FA00000002uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E600000001uLL},
+{0x078644FA00000002uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA00000002uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFFuLL},
+{0x078644FA00000002uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFF2uLL},
+{0x078644FA00000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E5F879BB08uLL},
+{0x078644FA00000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E5F8B851EEuLL},
+{0x078644FA00000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000003uLL},
+{0x078644FA00000002uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E580000002uLL},
+{0x078644FA00000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E500000005uLL},
+{0x078644FA00000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E500000004uLL},
+{0x078644FA00000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E500000003uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000002uLL},
+{0x078644FA00000003uLL, 0x0000000000000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL},
+{0x078644FA00000003uLL, 0x0000000000000002uLL, 0x03C3227D00000001uLL, 0x0000000000000001uLL},
+{0x078644FA00000003uLL, 0x0000000000000003uLL, 0x028216FE00000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000003uLL, 0x0000000000000010uLL, 0x0078644FA0000000uLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x00000000078644FAuLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x000000000747AE14uLL, 0x000000010898F295uLL, 0x0000000004D8C65FuLL},
+{0x078644FA00000003uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x000000000F0C89F7uLL},
+{0x078644FA00000003uLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001692CEF1uLL},
+{0x078644FA00000003uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000000F0C89F7uLL},
+{0x078644FA00000003uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000078644FDuLL},
+{0x078644FA00000003uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x0000000100000001uLL, 0x00000000078644F9uLL, 0x00000000F879BB0AuLL},
+{0x078644FA00000003uLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F0F37611uLL},
+{0x078644FA00000003uLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000E96D3118uLL},
+{0x078644FA00000003uLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x00000000879BB073uLL},
+{0x078644FA00000003uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x000000006C09ACD5uLL},
+{0x078644FA00000003uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000082B63E2BuLL},
+{0x078644FA00000003uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000005042DFFuLL},
+{0x078644FA00000003uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000000B49677AuLL},
+{0x078644FA00000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000000078644FDuLL},
+{0x078644FA00000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000003C32280uLL},
+{0x078644FA00000003uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x0000000200000001uLL, 0x0000000003C3227CuLL, 0x00000001FC3CDD87uLL},
+{0x078644FA00000003uLL, 0x0000000200000002uLL, 0x0000000003C3227CuLL, 0x00000001F879BB0BuLL},
+{0x078644FA00000003uLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001F4B6988FuLL},
+{0x078644FA00000003uLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001C3CDD843uLL},
+{0x078644FA00000003uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000181754585uLL},
+{0x078644FA00000003uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x000000019B4CF187uLL},
+{0x078644FA00000003uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x0000000183028200uLL},
+{0x078644FA00000003uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x0000000180000003uLL},
+{0x078644FA00000003uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000000078644FDuLL},
+{0x078644FA00000003uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000005042DFFuLL},
+{0x078644FA00000003uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x0000000002821701uLL},
+{0x078644FA00000003uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x0000000300000001uLL, 0x00000000028216FDuLL, 0x00000002FD7DE906uLL},
+{0x078644FA00000003uLL, 0x0000000300000002uLL, 0x00000000028216FDuLL, 0x00000002FAFBD209uLL},
+{0x078644FA00000003uLL, 0x0000000300000003uLL, 0x00000000028216FDuLL, 0x00000002F879BB0CuLL},
+{0x078644FA00000003uLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002D7DE9033uLL},
+{0x078644FA00000003uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x0000000266ACEAE7uLL},
+{0x078644FA00000003uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000CC648253uLL},
+{0x078644FA00000003uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000282265CDCuLL},
+{0x078644FA00000003uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x0000000280000003uLL},
+{0x078644FA00000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000205A4B3BDuLL},
+{0x078644FA00000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000203C3227FuLL},
+{0x078644FA00000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000201E19141uLL},
+{0x078644FA00000003uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A00000003uLL},
+{0x078644FA00000003uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x00000009FF879BB4uLL},
+{0x078644FA00000003uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x00000009FF0F3765uLL},
+{0x078644FA00000003uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x00000009FE96D316uLL},
+{0x078644FA00000003uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x00000009F879BB13uLL},
+{0x078644FA00000003uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000001E3B0ACBuLL},
+{0x078644FA00000003uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000438F2016FuLL},
+{0x078644FA00000003uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C0074BE5FuLL},
+{0x078644FA00000003uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C00000003uLL},
+{0x078644FA00000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000000153EE11uLL},
+{0x078644FA00000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000000E29EB7uLL},
+{0x078644FA00000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000000714F5DuLL},
+{0x078644FA00000003uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x078644FA00000003uLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x078644FA00000003uLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x078644FA00000003uLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E600000003uLL},
+{0x078644FA00000003uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E600000002uLL},
+{0x078644FA00000003uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E600000001uLL},
+{0x078644FA00000003uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA00000003uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFF3uLL},
+{0x078644FA00000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E5F879BB09uLL},
+{0x078644FA00000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E5F8B851EFuLL},
+{0x078644FA00000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000004uLL},
+{0x078644FA00000003uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E580000003uLL},
+{0x078644FA00000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E500000006uLL},
+{0x078644FA00000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E500000005uLL},
+{0x078644FA00000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E500000004uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000003uLL},
+{0x078644FA00000010uLL, 0x0000000000000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL},
+{0x078644FA00000010uLL, 0x0000000000000002uLL, 0x03C3227D00000008uLL, 0x0000000000000000uLL},
+{0x078644FA00000010uLL, 0x0000000000000003uLL, 0x028216FE00000005uLL, 0x0000000000000001uLL},
+{0x078644FA00000010uLL, 0x0000000000000010uLL, 0x0078644FA0000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000010uLL, 0x00000000078644FAuLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x000000000747AE14uLL, 0x000000010898F295uLL, 0x0000000004D8C66CuLL},
+{0x078644FA00000010uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x000000000F0C8A04uLL},
+{0x078644FA00000010uLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001692CEFEuLL},
+{0x078644FA00000010uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000000F0C8A04uLL},
+{0x078644FA00000010uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x000000000786450AuLL},
+{0x078644FA00000010uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x0000000100000001uLL, 0x00000000078644F9uLL, 0x00000000F879BB17uLL},
+{0x078644FA00000010uLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F0F3761EuLL},
+{0x078644FA00000010uLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000E96D3125uLL},
+{0x078644FA00000010uLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x00000000879BB080uLL},
+{0x078644FA00000010uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x000000006C09ACE2uLL},
+{0x078644FA00000010uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000082B63E38uLL},
+{0x078644FA00000010uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000005042E0CuLL},
+{0x078644FA00000010uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000000B496787uLL},
+{0x078644FA00000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x000000000786450AuLL},
+{0x078644FA00000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000003C3228DuLL},
+{0x078644FA00000010uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x0000000200000001uLL, 0x0000000003C3227CuLL, 0x00000001FC3CDD94uLL},
+{0x078644FA00000010uLL, 0x0000000200000002uLL, 0x0000000003C3227CuLL, 0x00000001F879BB18uLL},
+{0x078644FA00000010uLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001F4B6989CuLL},
+{0x078644FA00000010uLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001C3CDD850uLL},
+{0x078644FA00000010uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000181754592uLL},
+{0x078644FA00000010uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x000000019B4CF194uLL},
+{0x078644FA00000010uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x000000018302820DuLL},
+{0x078644FA00000010uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x0000000180000010uLL},
+{0x078644FA00000010uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x000000000786450AuLL},
+{0x078644FA00000010uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000005042E0CuLL},
+{0x078644FA00000010uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x000000000282170EuLL},
+{0x078644FA00000010uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x0000000300000001uLL, 0x00000000028216FDuLL, 0x00000002FD7DE913uLL},
+{0x078644FA00000010uLL, 0x0000000300000002uLL, 0x00000000028216FDuLL, 0x00000002FAFBD216uLL},
+{0x078644FA00000010uLL, 0x0000000300000003uLL, 0x00000000028216FDuLL, 0x00000002F879BB19uLL},
+{0x078644FA00000010uLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002D7DE9040uLL},
+{0x078644FA00000010uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x0000000266ACEAF4uLL},
+{0x078644FA00000010uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000CC648260uLL},
+{0x078644FA00000010uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000282265CE9uLL},
+{0x078644FA00000010uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x0000000280000010uLL},
+{0x078644FA00000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000205A4B3CAuLL},
+{0x078644FA00000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000203C3228CuLL},
+{0x078644FA00000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000201E1914EuLL},
+{0x078644FA00000010uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A00000010uLL},
+{0x078644FA00000010uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x00000009FF879BC1uLL},
+{0x078644FA00000010uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x00000009FF0F3772uLL},
+{0x078644FA00000010uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x00000009FE96D323uLL},
+{0x078644FA00000010uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x00000009F879BB20uLL},
+{0x078644FA00000010uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000001E3B0AD8uLL},
+{0x078644FA00000010uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000438F2017CuLL},
+{0x078644FA00000010uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C0074BE6CuLL},
+{0x078644FA00000010uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C00000010uLL},
+{0x078644FA00000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000000153EE1EuLL},
+{0x078644FA00000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000000E29EC4uLL},
+{0x078644FA00000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000000714F6AuLL},
+{0x078644FA00000010uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x078644FA00000010uLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x078644FA00000010uLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x078644FA00000010uLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x078644FA00000010uLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA00000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E600000010uLL},
+{0x078644FA00000010uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E60000000FuLL},
+{0x078644FA00000010uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E60000000EuLL},
+{0x078644FA00000010uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E60000000DuLL},
+{0x078644FA00000010uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA00000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E5F879BB16uLL},
+{0x078644FA00000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E5F8B851FCuLL},
+{0x078644FA00000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000011uLL},
+{0x078644FA00000010uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E580000010uLL},
+{0x078644FA00000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E500000013uLL},
+{0x078644FA00000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E500000012uLL},
+{0x078644FA00000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E500000011uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA00000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA00000010uLL},
+{0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x0000000000000002uLL, 0x03C3227D03C3227DuLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x0000000000000003uLL, 0x028216FE028216FEuLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x0000000000000010uLL, 0x0078644FA078644FuLL, 0x000000000000000AuLL},
+{0x078644FA078644FAuLL, 0x00000000078644FAuLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x000000000747AE14uLL, 0x000000010898F296uLL, 0x0000000005175D42uLL},
+{0x078644FA078644FAuLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x000000001692CEEEuLL},
+{0x078644FA078644FAuLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x00000000078644FAuLL},
+{0x078644FA078644FAuLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001E1913E8uLL},
+{0x078644FA078644FAuLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000001692CEEEuLL},
+{0x078644FA078644FAuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x000000000F0C89F4uLL},
+{0x078644FA078644FAuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x00000000078644FAuLL},
+{0x078644FA078644FAuLL, 0x0000000100000001uLL, 0x00000000078644FAuLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F879BB08uLL},
+{0x078644FA078644FAuLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000F0F3760FuLL},
+{0x078644FA078644FAuLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x000000008F21F56AuLL},
+{0x078644FA078644FAuLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x00000000738FF1CCuLL},
+{0x078644FA078644FAuLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x000000008A3C8322uLL},
+{0x078644FA078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x000000000C8A72F6uLL},
+{0x078644FA078644FAuLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x00000000078644FAuLL},
+{0x078644FA078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x0000000012CFAC71uLL},
+{0x078644FA078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x000000000F0C89F4uLL},
+{0x078644FA078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x000000000B496777uLL},
+{0x078644FA078644FAuLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x00000000078644FAuLL},
+{0x078644FA078644FAuLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x0000000003C3227DuLL},
+{0x078644FA078644FAuLL, 0x0000000200000002uLL, 0x0000000003C3227DuLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001FC3CDD86uLL},
+{0x078644FA078644FAuLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001CB541D3AuLL},
+{0x078644FA078644FAuLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000188FB8A7CuLL},
+{0x078644FA078644FAuLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x00000001A2D3367EuLL},
+{0x078644FA078644FAuLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x000000018A88C6F7uLL},
+{0x078644FA078644FAuLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x00000001878644FAuLL},
+{0x078644FA078644FAuLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x000000000F0C89F4uLL},
+{0x078644FA078644FAuLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x000000000C8A72F6uLL},
+{0x078644FA078644FAuLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x000000000A085BF8uLL},
+{0x078644FA078644FAuLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x00000000078644FAuLL},
+{0x078644FA078644FAuLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x0000000005042DFCuLL},
+{0x078644FA078644FAuLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x00000000028216FEuLL},
+{0x078644FA078644FAuLL, 0x0000000300000003uLL, 0x00000000028216FEuLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002DF64D52AuLL},
+{0x078644FA078644FAuLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x000000026E332FDEuLL},
+{0x078644FA078644FAuLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000D3EAC74AuLL},
+{0x078644FA078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000289ACA1D3uLL},
+{0x078644FA078644FAuLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x00000002878644FAuLL},
+{0x078644FA078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x000000020D2AF8B4uLL},
+{0x078644FA078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x000000020B496776uLL},
+{0x078644FA078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x000000020967D638uLL},
+{0x078644FA078644FAuLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A078644FAuLL},
+{0x078644FA078644FAuLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000A070DE0ABuLL},
+{0x078644FA078644FAuLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000A06957C5CuLL},
+{0x078644FA078644FAuLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000A061D180DuLL},
+{0x078644FA078644FAuLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x0000000A0000000AuLL},
+{0x078644FA078644FAuLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x0000000025C14FC2uLL},
+{0x078644FA078644FAuLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000440784666uLL},
+{0x078644FA078644FAuLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C07FB0356uLL},
+{0x078644FA078644FAuLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C078644FAuLL},
+{0x078644FA078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x0000000008DA3308uLL},
+{0x078644FA078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x000000000868E3AEuLL},
+{0x078644FA078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000007F79454uLL},
+{0x078644FA078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x078644FA078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x078644FA078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x078644FA078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x078644FA078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x078644FA078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x078644FA078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E6078644FAuLL},
+{0x078644FA078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E6078644F9uLL},
+{0x078644FA078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E6078644F8uLL},
+{0x078644FA078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E6078644F7uLL},
+{0x078644FA078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E6078644EAuLL},
+{0x078644FA078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E6003E96E6uLL},
+{0x078644FA078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E5878644FBuLL},
+{0x078644FA078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E5878644FAuLL},
+{0x078644FA078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E5078644FDuLL},
+{0x078644FA078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E5078644FCuLL},
+{0x078644FA078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E5078644FBuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA078644FAuLL},
+{0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL},
+{0x078644FA0747AE14uLL, 0x0000000000000002uLL, 0x03C3227D03A3D70AuLL, 0x0000000000000000uLL},
+{0x078644FA0747AE14uLL, 0x0000000000000003uLL, 0x028216FE026D3A06uLL, 0x0000000000000002uLL},
+{0x078644FA0747AE14uLL, 0x0000000000000010uLL, 0x0078644FA0747AE1uLL, 0x0000000000000004uLL},
+{0x078644FA0747AE14uLL, 0x00000000078644FAuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x000000000747AE14uLL, 0x000000010898F296uLL, 0x0000000004D8C65CuLL},
+{0x078644FA0747AE14uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F4uLL, 0x0000000016543808uLL},
+{0x078644FA0747AE14uLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000001DDA7D02uLL},
+{0x078644FA0747AE14uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000016543808uLL},
+{0x078644FA0747AE14uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x000000000ECDF30EuLL},
+{0x078644FA0747AE14uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0000000100000001uLL, 0x00000000078644F9uLL, 0x00000000FFC1691BuLL},
+{0x078644FA0747AE14uLL, 0x0000000100000002uLL, 0x00000000078644F9uLL, 0x00000000F83B2422uLL},
+{0x078644FA0747AE14uLL, 0x0000000100000003uLL, 0x00000000078644F9uLL, 0x00000000F0B4DF29uLL},
+{0x078644FA0747AE14uLL, 0x0000000100000010uLL, 0x00000000078644F9uLL, 0x000000008EE35E84uLL},
+{0x078644FA0747AE14uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x0000000073515AE6uLL},
+{0x078644FA0747AE14uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000089FDEC3CuLL},
+{0x078644FA0747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x000000000C4BDC10uLL},
+{0x078644FA0747AE14uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000001291158BuLL},
+{0x078644FA0747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x000000000ECDF30EuLL},
+{0x078644FA0747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x000000000B0AD091uLL},
+{0x078644FA0747AE14uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x0000000003848B97uLL},
+{0x078644FA0747AE14uLL, 0x0000000200000002uLL, 0x0000000003C3227CuLL, 0x00000001FFC1691CuLL},
+{0x078644FA0747AE14uLL, 0x0000000200000003uLL, 0x0000000003C3227CuLL, 0x00000001FBFE46A0uLL},
+{0x078644FA0747AE14uLL, 0x0000000200000010uLL, 0x0000000003C3227CuLL, 0x00000001CB158654uLL},
+{0x078644FA0747AE14uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000188BCF396uLL},
+{0x078644FA0747AE14uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D3uLL, 0x00000001A2949F98uLL},
+{0x078644FA0747AE14uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x000000018A4A3011uLL},
+{0x078644FA0747AE14uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x000000018747AE14uLL},
+{0x078644FA0747AE14uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x000000000ECDF30EuLL},
+{0x078644FA0747AE14uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x000000000C4BDC10uLL},
+{0x078644FA0747AE14uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x0000000009C9C512uLL},
+{0x078644FA0747AE14uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x0000000004C59716uLL},
+{0x078644FA0747AE14uLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x0000000002438018uLL},
+{0x078644FA0747AE14uLL, 0x0000000300000003uLL, 0x00000000028216FDuLL, 0x00000002FFC1691DuLL},
+{0x078644FA0747AE14uLL, 0x0000000300000010uLL, 0x00000000028216FDuLL, 0x00000002DF263E44uLL},
+{0x078644FA0747AE14uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x000000026DF498F8uLL},
+{0x078644FA0747AE14uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000000D3AC3064uLL},
+{0x078644FA0747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x00000002896E0AEDuLL},
+{0x078644FA0747AE14uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x000000028747AE14uLL},
+{0x078644FA0747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x000000020CEC61CEuLL},
+{0x078644FA0747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x000000020B0AD090uLL},
+{0x078644FA0747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000209293F52uLL},
+{0x078644FA0747AE14uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000A06CF49C5uLL},
+{0x078644FA0747AE14uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000A0656E576uLL},
+{0x078644FA0747AE14uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000A05DE8127uLL},
+{0x078644FA0747AE14uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x00000009FFC16924uLL},
+{0x078644FA0747AE14uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000002582B8DCuLL},
+{0x078644FA0747AE14uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x000000044039AF80uLL},
+{0x078644FA0747AE14uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C07BC6C70uLL},
+{0x078644FA0747AE14uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x00000000089B9C22uLL},
+{0x078644FA0747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x00000000082A4CC8uLL},
+{0x078644FA0747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000007B8FD6EuLL},
+{0x078644FA0747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x078644FA0747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x078644FA0747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x078644FA0747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x078644FA0747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x078644FA0747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA0747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E60747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E60747AE13uLL},
+{0x078644FA0747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E60747AE12uLL},
+{0x078644FA0747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E60747AE11uLL},
+{0x078644FA0747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E60747AE04uLL},
+{0x078644FA0747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E5FFC1691AuLL},
+{0x078644FA0747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA0747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E58747AE15uLL},
+{0x078644FA0747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E58747AE14uLL},
+{0x078644FA0747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E50747AE17uLL},
+{0x078644FA0747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E50747AE16uLL},
+{0x078644FA0747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E50747AE15uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA0747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA0747AE14uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000000000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000000000002uLL, 0x03C3227D3FFFFFFFuLL, 0x0000000000000001uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000000000003uLL, 0x028216FE2AAAAAAAuLL, 0x0000000000000001uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000000000010uLL, 0x0078644FA7FFFFFFuLL, 0x000000000000000FuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000100000011uLL, 0x0000000000156B65uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000000747AE14uLL, 0x000000010898F2A7uLL, 0x0000000001CE88F3uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F5uLL, 0x000000000F0C89F4uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000080000000uLL, 0x000000000F0C89F4uLL, 0x000000007FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000009692CEEDuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000008F0C89F3uLL},
+{0x078644FA7FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000878644F9uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x000000007FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000100000001uLL, 0x00000000078644FAuLL, 0x000000007879BB05uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000100000002uLL, 0x00000000078644FAuLL, 0x0000000070F3760BuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000100000003uLL, 0x00000000078644FAuLL, 0x00000000696D3111uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000100000010uLL, 0x00000000078644FAuLL, 0x00000000079BB05FuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x00000000EC09ACD1uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000102B63E27uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000085042DFBuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x000000007FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000008B496776uLL},
+{0x078644FA7FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000000878644F9uLL},
+{0x078644FA7FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000083C3227CuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x000000007FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x000000007C3CDD82uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000003C3227DuLL, 0x000000007879BB05uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000003C3227DuLL, 0x0000000074B69888uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000003C3227DuLL, 0x0000000043CDD82FuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000201754581uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000003B5A1D4uLL, 0x000000001405436FuLL},
+{0x078644FA7FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x00000002030281FCuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x00000001FFFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000000878644F9uLL},
+{0x078644FA7FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000085042DFBuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000000828216FDuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x000000007FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x000000007D7DE901uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x000000007AFBD203uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000300000003uLL, 0x00000000028216FEuLL, 0x000000007879BB05uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000300000010uLL, 0x00000000028216FEuLL, 0x0000000057DE901FuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x00000002E6ACEAE3uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x000000014C64824FuLL},
+{0x078644FA7FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000302265CD8uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x00000002FFFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000285A4B3B9uLL},
+{0x078644FA7FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000283C3227BuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000281E1913DuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000A7F879BB0uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000A7F0F3761uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000A7E96D312uLL},
+{0x078644FA7FFFFFFFuLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x0000000A7879BB0FuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000009E3B0AC7uLL},
+{0x078644FA7FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x00000004B8F2016BuLL},
+{0x078644FA7FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C8074BE5BuLL},
+{0x078644FA7FFFFFFFuLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000008153EE0DuLL},
+{0x078644FA7FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000080E29EB3uLL},
+{0x078644FA7FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000080714F59uLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFEuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFDuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFCuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFEFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E67879BB05uLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E678B851EBuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E580000002uLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E580000001uLL},
+{0x078644FA7FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000000uLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA7FFFFFFFuLL},
+{0x078644FA80000000uLL, 0x0000000000000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL},
+{0x078644FA80000000uLL, 0x0000000000000002uLL, 0x03C3227D40000000uLL, 0x0000000000000000uLL},
+{0x078644FA80000000uLL, 0x0000000000000003uLL, 0x028216FE2AAAAAAAuLL, 0x0000000000000002uLL},
+{0x078644FA80000000uLL, 0x0000000000000010uLL, 0x0078644FA8000000uLL, 0x0000000000000000uLL},
+{0x078644FA80000000uLL, 0x00000000078644FAuLL, 0x0000000100000011uLL, 0x0000000000156B66uLL},
+{0x078644FA80000000uLL, 0x000000000747AE14uLL, 0x000000010898F2A7uLL, 0x0000000001CE88F4uLL},
+{0x078644FA80000000uLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F5uLL, 0x000000000F0C89F5uLL},
+{0x078644FA80000000uLL, 0x0000000080000000uLL, 0x000000000F0C89F5uLL, 0x0000000000000000uLL},
+{0x078644FA80000000uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x000000009692CEEEuLL},
+{0x078644FA80000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x000000008F0C89F4uLL},
+{0x078644FA80000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000878644FAuLL},
+{0x078644FA80000000uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x0000000080000000uLL},
+{0x078644FA80000000uLL, 0x0000000100000001uLL, 0x00000000078644FAuLL, 0x000000007879BB06uLL},
+{0x078644FA80000000uLL, 0x0000000100000002uLL, 0x00000000078644FAuLL, 0x0000000070F3760CuLL},
+{0x078644FA80000000uLL, 0x0000000100000003uLL, 0x00000000078644FAuLL, 0x00000000696D3112uLL},
+{0x078644FA80000000uLL, 0x0000000100000010uLL, 0x00000000078644FAuLL, 0x00000000079BB060uLL},
+{0x078644FA80000000uLL, 0x00000001078644FAuLL, 0x00000000074F44A3uLL, 0x00000000EC09ACD2uLL},
+{0x078644FA80000000uLL, 0x000000010747AE14uLL, 0x000000000751017EuLL, 0x0000000102B63E28uLL},
+{0x078644FA80000000uLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000085042DFCuLL},
+{0x078644FA80000000uLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x0000000080000000uLL},
+{0x078644FA80000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000008B496777uLL},
+{0x078644FA80000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000000878644FAuLL},
+{0x078644FA80000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000083C3227DuLL},
+{0x078644FA80000000uLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x0000000080000000uLL},
+{0x078644FA80000000uLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x000000007C3CDD83uLL},
+{0x078644FA80000000uLL, 0x0000000200000002uLL, 0x0000000003C3227DuLL, 0x000000007879BB06uLL},
+{0x078644FA80000000uLL, 0x0000000200000003uLL, 0x0000000003C3227DuLL, 0x0000000074B69889uLL},
+{0x078644FA80000000uLL, 0x0000000200000010uLL, 0x0000000003C3227DuLL, 0x0000000043CDD830uLL},
+{0x078644FA80000000uLL, 0x00000002078644FAuLL, 0x0000000003B52F6BuLL, 0x0000000201754582uLL},
+{0x078644FA80000000uLL, 0x000000020747AE14uLL, 0x0000000003B5A1D4uLL, 0x0000000014054370uLL},
+{0x078644FA80000000uLL, 0x000000027FFFFFFFuLL, 0x00000000030281FDuLL, 0x00000002030281FDuLL},
+{0x078644FA80000000uLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x0000000200000000uLL},
+{0x078644FA80000000uLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000000878644FAuLL},
+{0x078644FA80000000uLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000085042DFCuLL},
+{0x078644FA80000000uLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000000828216FEuLL},
+{0x078644FA80000000uLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x0000000080000000uLL},
+{0x078644FA80000000uLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x000000007D7DE902uLL},
+{0x078644FA80000000uLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x000000007AFBD204uLL},
+{0x078644FA80000000uLL, 0x0000000300000003uLL, 0x00000000028216FEuLL, 0x000000007879BB06uLL},
+{0x078644FA80000000uLL, 0x0000000300000010uLL, 0x00000000028216FEuLL, 0x0000000057DE9020uLL},
+{0x078644FA80000000uLL, 0x00000003078644FAuLL, 0x00000000027BDC26uLL, 0x00000002E6ACEAE4uLL},
+{0x078644FA80000000uLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x000000014C648250uLL},
+{0x078644FA80000000uLL, 0x000000037FFFFFFFuLL, 0x0000000002265CD9uLL, 0x0000000302265CD9uLL},
+{0x078644FA80000000uLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x0000000300000000uLL},
+{0x078644FA80000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000285A4B3BAuLL},
+{0x078644FA80000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000283C3227CuLL},
+{0x078644FA80000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000281E1913EuLL},
+{0x078644FA80000000uLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000A80000000uLL},
+{0x078644FA80000000uLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000A7F879BB1uLL},
+{0x078644FA80000000uLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000A7F0F3762uLL},
+{0x078644FA80000000uLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000A7E96D313uLL},
+{0x078644FA80000000uLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x0000000A7879BB10uLL},
+{0x078644FA80000000uLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000009E3B0AC8uLL},
+{0x078644FA80000000uLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x00000004B8F2016CuLL},
+{0x078644FA80000000uLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000C8074BE5CuLL},
+{0x078644FA80000000uLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000C80000000uLL},
+{0x078644FA80000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000008153EE0EuLL},
+{0x078644FA80000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000080E29EB4uLL},
+{0x078644FA80000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000080714F5AuLL},
+{0x078644FA80000000uLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x078644FA80000000uLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x078644FA80000000uLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x078644FA80000000uLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x078644FA80000000uLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x078644FA80000000uLL, 0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x078644FA80000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x078644FA80000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x078644FA80000000uLL, 0x078644FA80000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FA80000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E680000000uLL},
+{0x078644FA80000000uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFFuLL},
+{0x078644FA80000000uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFEuLL},
+{0x078644FA80000000uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFDuLL},
+{0x078644FA80000000uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFF0uLL},
+{0x078644FA80000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E67879BB06uLL},
+{0x078644FA80000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E678B851ECuLL},
+{0x078644FA80000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E600000001uLL},
+{0x078644FA80000000uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FA80000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E580000003uLL},
+{0x078644FA80000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E580000002uLL},
+{0x078644FA80000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E580000001uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FA80000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FA80000000uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000000000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000000000002uLL, 0x03C3227D7FFFFFFEuLL, 0x0000000000000001uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000000000003uLL, 0x028216FE55555554uLL, 0x0000000000000001uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000000000010uLL, 0x0078644FAFFFFFFFuLL, 0x000000000000000DuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000000100000022uLL, 0x00000000002AD6C9uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000010898F2B8uLL, 0x00000000060BF99DuLL},
+{0x078644FAFFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F6uLL, 0x000000000F0C89F3uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000080000000uLL, 0x000000000F0C89F5uLL, 0x000000007FFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FBuLL, 0x000000001692CEEEuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FBuLL, 0x000000000F0C89F3uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FBuLL, 0x00000000078644F8uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000100000001uLL, 0x00000000078644FAuLL, 0x00000000F879BB03uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000100000002uLL, 0x00000000078644FAuLL, 0x00000000F0F37609uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000100000003uLL, 0x00000000078644FAuLL, 0x00000000E96D310FuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000100000010uLL, 0x00000000078644FAuLL, 0x00000000879BB05DuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000001078644FAuLL, 0x00000000074F44A4uLL, 0x00000000648367D5uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000010747AE14uLL, 0x000000000751017FuLL, 0x000000007B6E9011uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000105042DF9uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000010B496774uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000001078644F7uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000103C3227AuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x00000000FC3CDD80uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000003C3227DuLL, 0x00000000F879BB03uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000003C3227DuLL, 0x00000000F4B69886uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000003C3227DuLL, 0x00000000C3CDD82DuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000003B52F6CuLL, 0x0000000079EF0085uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000020747AE14uLL, 0x0000000003B5A1D4uLL, 0x000000009405436DuLL},
+{0x078644FAFFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x00000000030281FEuLL, 0x00000000030281FBuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x000000027FFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000001078644F7uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000105042DF9uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000001028216FBuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x00000000FD7DE8FFuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x00000000FAFBD201uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000300000003uLL, 0x00000000028216FEuLL, 0x00000000F879BB03uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000300000010uLL, 0x00000000028216FEuLL, 0x00000000D7DE901DuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000003078644FAuLL, 0x00000000027BDC27uLL, 0x000000005F26A5E7uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000001CC64824DuLL},
+{0x078644FAFFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000002265CDAuLL, 0x0000000002265CD7uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x000000037FFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000305A4B3B7uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000303C32279uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000301E1913BuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000AFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000AFF879BAEuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000AFF0F375FuLL},
+{0x078644FAFFFFFFFDuLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000AFE96D310uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x0000000AF879BB0DuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000011E3B0AC5uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000538F20169uLL},
+{0x078644FAFFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000D0074BE59uLL},
+{0x078644FAFFFFFFFDuLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000CFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000010153EE0BuLL},
+{0x078644FAFFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000100E29EB1uLL},
+{0x078644FAFFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000100714F57uLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFCuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFBuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFAuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFEDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E6F879BB03uLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E6F8B851E9uLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFEuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFFuLL},
+{0x078644FAFFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFEuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFDuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000000000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000000000002uLL, 0x03C3227D7FFFFFFFuLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000000000003uLL, 0x028216FE55555554uLL, 0x0000000000000002uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000000000010uLL, 0x0078644FAFFFFFFFuLL, 0x000000000000000EuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000000100000022uLL, 0x00000000002AD6CAuLL},
+{0x078644FAFFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000010898F2B8uLL, 0x00000000060BF99EuLL},
+{0x078644FAFFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F6uLL, 0x000000000F0C89F4uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000080000000uLL, 0x000000000F0C89F5uLL, 0x000000007FFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FBuLL, 0x000000001692CEEFuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FBuLL, 0x000000000F0C89F4uLL},
+{0x078644FAFFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FBuLL, 0x00000000078644F9uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x00000000FFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000100000001uLL, 0x00000000078644FAuLL, 0x00000000F879BB04uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000100000002uLL, 0x00000000078644FAuLL, 0x00000000F0F3760AuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000100000003uLL, 0x00000000078644FAuLL, 0x00000000E96D3110uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000100000010uLL, 0x00000000078644FAuLL, 0x00000000879BB05EuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000001078644FAuLL, 0x00000000074F44A4uLL, 0x00000000648367D6uLL},
+{0x078644FAFFFFFFFEuLL, 0x000000010747AE14uLL, 0x000000000751017FuLL, 0x000000007B6E9012uLL},
+{0x078644FAFFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000105042DFAuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x00000000FFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000010B496775uLL},
+{0x078644FAFFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000001078644F8uLL},
+{0x078644FAFFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000103C3227BuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x00000000FFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x00000000FC3CDD81uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000003C3227DuLL, 0x00000000F879BB04uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000003C3227DuLL, 0x00000000F4B69887uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000003C3227DuLL, 0x00000000C3CDD82EuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000003B52F6CuLL, 0x0000000079EF0086uLL},
+{0x078644FAFFFFFFFEuLL, 0x000000020747AE14uLL, 0x0000000003B5A1D4uLL, 0x000000009405436EuLL},
+{0x078644FAFFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x00000000030281FEuLL, 0x00000000030281FCuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x000000027FFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000001078644F8uLL},
+{0x078644FAFFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000105042DFAuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000001028216FCuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x00000000FFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x00000000FD7DE900uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x00000000FAFBD202uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000300000003uLL, 0x00000000028216FEuLL, 0x00000000F879BB04uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000300000010uLL, 0x00000000028216FEuLL, 0x00000000D7DE901EuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000003078644FAuLL, 0x00000000027BDC27uLL, 0x000000005F26A5E8uLL},
+{0x078644FAFFFFFFFEuLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000001CC64824EuLL},
+{0x078644FAFFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000002265CDAuLL, 0x0000000002265CD8uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x000000037FFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000305A4B3B8uLL},
+{0x078644FAFFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000303C3227AuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000301E1913CuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000AFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000AFF879BAFuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000AFF0F3760uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000AFE96D311uLL},
+{0x078644FAFFFFFFFEuLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x0000000AF879BB0EuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000011E3B0AC6uLL},
+{0x078644FAFFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000538F2016AuLL},
+{0x078644FAFFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000D0074BE5AuLL},
+{0x078644FAFFFFFFFEuLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000CFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000010153EE0CuLL},
+{0x078644FAFFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000100E29EB2uLL},
+{0x078644FAFFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000100714F58uLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFDuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFCuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFBuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFEEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E6F879BB04uLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E6F8B851EAuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFFuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E600000001uLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FAFFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E5FFFFFFFFuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFEuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000000000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000000000002uLL, 0x03C3227D7FFFFFFFuLL, 0x0000000000000001uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000000000003uLL, 0x028216FE55555555uLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000000000010uLL, 0x0078644FAFFFFFFFuLL, 0x000000000000000FuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000000100000022uLL, 0x00000000002AD6CBuLL},
+{0x078644FAFFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000010898F2B8uLL, 0x00000000060BF99FuLL},
+{0x078644FAFFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000000F0C89F6uLL, 0x000000000F0C89F5uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000080000000uLL, 0x000000000F0C89F5uLL, 0x000000007FFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FBuLL, 0x000000001692CEF0uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FBuLL, 0x000000000F0C89F5uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FBuLL, 0x00000000078644FAuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL, 0x00000000FFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000100000001uLL, 0x00000000078644FAuLL, 0x00000000F879BB05uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000100000002uLL, 0x00000000078644FAuLL, 0x00000000F0F3760BuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000100000003uLL, 0x00000000078644FAuLL, 0x00000000E96D3111uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000100000010uLL, 0x00000000078644FAuLL, 0x00000000879BB05FuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000074F44A4uLL, 0x00000000648367D7uLL},
+{0x078644FAFFFFFFFFuLL, 0x000000010747AE14uLL, 0x000000000751017FuLL, 0x000000007B6E9013uLL},
+{0x078644FAFFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000005042DFCuLL, 0x0000000105042DFBuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000005042DFCuLL, 0x00000000FFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000003C3227DuLL, 0x000000010B496776uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000003C3227DuLL, 0x00000001078644F9uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000003C3227DuLL, 0x0000000103C3227CuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000003C3227DuLL, 0x00000000FFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000003C3227DuLL, 0x00000000FC3CDD82uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000003C3227DuLL, 0x00000000F879BB05uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000003C3227DuLL, 0x00000000F4B69888uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000003C3227DuLL, 0x00000000C3CDD82FuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000003B52F6CuLL, 0x0000000079EF0087uLL},
+{0x078644FAFFFFFFFFuLL, 0x000000020747AE14uLL, 0x0000000003B5A1D4uLL, 0x000000009405436FuLL},
+{0x078644FAFFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x00000000030281FEuLL, 0x00000000030281FDuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000280000000uLL, 0x00000000030281FDuLL, 0x000000027FFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x00000000028216FEuLL, 0x00000001078644F9uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x00000000028216FEuLL, 0x0000000105042DFBuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x00000000028216FEuLL, 0x00000001028216FDuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000300000000uLL, 0x00000000028216FEuLL, 0x00000000FFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000300000001uLL, 0x00000000028216FEuLL, 0x00000000FD7DE901uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000300000002uLL, 0x00000000028216FEuLL, 0x00000000FAFBD203uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000300000003uLL, 0x00000000028216FEuLL, 0x00000000F879BB05uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000300000010uLL, 0x00000000028216FEuLL, 0x00000000D7DE901FuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000003078644FAuLL, 0x00000000027BDC27uLL, 0x000000005F26A5E9uLL},
+{0x078644FAFFFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000027C0F7CuLL, 0x00000001CC64824FuLL},
+{0x078644FAFFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000002265CDAuLL, 0x0000000002265CD9uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000002265CD9uLL, 0x000000037FFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000001E1913EuLL, 0x0000000305A4B3B9uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000001E1913EuLL, 0x0000000303C3227BuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000001E1913EuLL, 0x0000000301E1913DuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000001000000000uLL, 0x000000000078644FuLL, 0x0000000AFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000001000000001uLL, 0x000000000078644FuLL, 0x0000000AFF879BB0uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000001000000002uLL, 0x000000000078644FuLL, 0x0000000AFF0F3761uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000001000000003uLL, 0x000000000078644FuLL, 0x0000000AFE96D312uLL},
+{0x078644FAFFFFFFFFuLL, 0x0000001000000010uLL, 0x000000000078644FuLL, 0x0000000AF879BB0FuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000782BCCuLL, 0x000000011E3B0AC7uLL},
+{0x078644FAFFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000000782DA1uLL, 0x0000000538F2016BuLL},
+{0x078644FAFFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000074BE5CuLL, 0x0000000D0074BE5BuLL},
+{0x078644FAFFFFFFFFuLL, 0x0000001080000000uLL, 0x000000000074BE5CuLL, 0x0000000CFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000000714F5AuLL, 0x000000010153EE0DuLL},
+{0x078644FAFFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000000714F5AuLL, 0x0000000100E29EB3uLL},
+{0x078644FAFFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000000714F5AuLL, 0x0000000100714F59uLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x078644FAFFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFEuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFDuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFFCuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x003E96E6FFFFFFEFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x003E96E6F879BB05uLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x003E96E6F8B851EBuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E680000000uLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x003E96E67FFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x003E96E600000002uLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x003E96E600000001uLL},
+{0x078644FAFFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x003E96E600000000uLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x078644FAFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x078644FAFFFFFFFFuLL},
+{0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0747AE1400000000uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x0000000000000002uLL, 0x03A3D70A00000000uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x0000000000000003uLL, 0x026D3A06AAAAAAAAuLL, 0x0000000000000002uLL},
+{0x0747AE1400000000uLL, 0x0000000000000010uLL, 0x00747AE140000000uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x00000000078644FAuLL, 0x00000000F7AE911DuLL, 0x0000000000CC95AEuLL},
+{0x0747AE1400000000uLL, 0x000000000747AE14uLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x000000000E8F5C28uLL},
+{0x0747AE1400000000uLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000015D70A3CuLL},
+{0x0747AE1400000000uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000000E8F5C28uLL},
+{0x0747AE1400000000uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000747AE14uLL},
+{0x0747AE1400000000uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x0000000100000001uLL, 0x000000000747AE13uLL, 0x00000000F8B851EDuLL},
+{0x0747AE1400000000uLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F170A3DAuLL},
+{0x0747AE1400000000uLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000EA28F5C7uLL},
+{0x0747AE1400000000uLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x000000008B851ED0uLL},
+{0x0747AE1400000000uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000000C50D07AuLL},
+{0x0747AE1400000000uLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000CD13E91CuLL},
+{0x0747AE1400000000uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000084DA740DuLL},
+{0x0747AE1400000000uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x0000000080000000uLL},
+{0x0747AE1400000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000000AEB851EuLL},
+{0x0747AE1400000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000747AE14uLL},
+{0x0747AE1400000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000003A3D70AuLL},
+{0x0747AE1400000000uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x0000000200000001uLL, 0x0000000003A3D709uLL, 0x00000001FC5C28F7uLL},
+{0x0747AE1400000000uLL, 0x0000000200000002uLL, 0x0000000003A3D709uLL, 0x00000001F8B851EEuLL},
+{0x0747AE1400000000uLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001F5147AE5uLL},
+{0x0747AE1400000000uLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001C5C28F70uLL},
+{0x0747AE1400000000uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007847CB06uLL},
+{0x0747AE1400000000uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x000000014B152C2CuLL},
+{0x0747AE1400000000uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x0000000202E978D4uLL},
+{0x0747AE1400000000uLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x0000000200000000uLL},
+{0x0747AE1400000000uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020747AE12uLL},
+{0x0747AE1400000000uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000204DA740CuLL},
+{0x0747AE1400000000uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002026D3A06uLL},
+{0x0747AE1400000000uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x0000000200000000uLL},
+{0x0747AE1400000000uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000001FD92C5FAuLL},
+{0x0747AE1400000000uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000001FB258BF4uLL},
+{0x0747AE1400000000uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000001F8B851EEuLL},
+{0x0747AE1400000000uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001D92C5FA0uLL},
+{0x0747AE1400000000uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018425ED06uLL},
+{0x0747AE1400000000uLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F112E8A4uLL},
+{0x0747AE1400000000uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000082147AE1uLL},
+{0x0747AE1400000000uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x0000000080000000uLL},
+{0x0747AE1400000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000575C28FuLL},
+{0x0747AE1400000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000003A3D70AuLL},
+{0x0747AE1400000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000001D1EB85uLL},
+{0x0747AE1400000000uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x0000000400000000uLL},
+{0x0747AE1400000000uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000003FF8B851FuLL},
+{0x0747AE1400000000uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000003FF170A3EuLL},
+{0x0747AE1400000000uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000003FEA28F5DuLL},
+{0x0747AE1400000000uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000003F8B851F0uLL},
+{0x0747AE1400000000uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B94A5DA32uLL},
+{0x0747AE1400000000uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BB84C4A8CuLL},
+{0x0747AE1400000000uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000008070F347uLL},
+{0x0747AE1400000000uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x0000000080000000uLL},
+{0x0747AE1400000000uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000000148E27CuLL},
+{0x0747AE1400000000uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000000DB41A8uLL},
+{0x0747AE1400000000uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000006DA0D4uLL},
+{0x0747AE1400000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000000uLL},
+{0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x0747AE1400000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000001uLL, 0x0000000000000002uLL, 0x03A3D70A00000000uLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x0000000000000003uLL, 0x026D3A06AAAAAAABuLL, 0x0000000000000000uLL},
+{0x0747AE1400000001uLL, 0x0000000000000010uLL, 0x00747AE140000000uLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x00000000078644FAuLL, 0x00000000F7AE911DuLL, 0x0000000000CC95AFuLL},
+{0x0747AE1400000001uLL, 0x000000000747AE14uLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x000000000E8F5C29uLL},
+{0x0747AE1400000001uLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000015D70A3DuLL},
+{0x0747AE1400000001uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000000E8F5C29uLL},
+{0x0747AE1400000001uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000747AE15uLL},
+{0x0747AE1400000001uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x0000000100000001uLL, 0x000000000747AE13uLL, 0x00000000F8B851EEuLL},
+{0x0747AE1400000001uLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F170A3DBuLL},
+{0x0747AE1400000001uLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000EA28F5C8uLL},
+{0x0747AE1400000001uLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x000000008B851ED1uLL},
+{0x0747AE1400000001uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000000C50D07BuLL},
+{0x0747AE1400000001uLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000CD13E91DuLL},
+{0x0747AE1400000001uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000084DA740EuLL},
+{0x0747AE1400000001uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x0000000080000001uLL},
+{0x0747AE1400000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000000AEB851FuLL},
+{0x0747AE1400000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000747AE15uLL},
+{0x0747AE1400000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000003A3D70BuLL},
+{0x0747AE1400000001uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x0000000200000001uLL, 0x0000000003A3D709uLL, 0x00000001FC5C28F8uLL},
+{0x0747AE1400000001uLL, 0x0000000200000002uLL, 0x0000000003A3D709uLL, 0x00000001F8B851EFuLL},
+{0x0747AE1400000001uLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001F5147AE6uLL},
+{0x0747AE1400000001uLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001C5C28F71uLL},
+{0x0747AE1400000001uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007847CB07uLL},
+{0x0747AE1400000001uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x000000014B152C2DuLL},
+{0x0747AE1400000001uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x0000000202E978D5uLL},
+{0x0747AE1400000001uLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x0000000200000001uLL},
+{0x0747AE1400000001uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020747AE13uLL},
+{0x0747AE1400000001uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000204DA740DuLL},
+{0x0747AE1400000001uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002026D3A07uLL},
+{0x0747AE1400000001uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x0000000200000001uLL},
+{0x0747AE1400000001uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000001FD92C5FBuLL},
+{0x0747AE1400000001uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000001FB258BF5uLL},
+{0x0747AE1400000001uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000001F8B851EFuLL},
+{0x0747AE1400000001uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001D92C5FA1uLL},
+{0x0747AE1400000001uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018425ED07uLL},
+{0x0747AE1400000001uLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F112E8A5uLL},
+{0x0747AE1400000001uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000082147AE2uLL},
+{0x0747AE1400000001uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x0000000080000001uLL},
+{0x0747AE1400000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000575C290uLL},
+{0x0747AE1400000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000003A3D70BuLL},
+{0x0747AE1400000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000001D1EB86uLL},
+{0x0747AE1400000001uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x0000000400000001uLL},
+{0x0747AE1400000001uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000003FF8B8520uLL},
+{0x0747AE1400000001uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000003FF170A3FuLL},
+{0x0747AE1400000001uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000003FEA28F5EuLL},
+{0x0747AE1400000001uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000003F8B851F1uLL},
+{0x0747AE1400000001uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B94A5DA33uLL},
+{0x0747AE1400000001uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BB84C4A8DuLL},
+{0x0747AE1400000001uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000008070F348uLL},
+{0x0747AE1400000001uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x0000000080000001uLL},
+{0x0747AE1400000001uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000000148E27DuLL},
+{0x0747AE1400000001uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000000DB41A9uLL},
+{0x0747AE1400000001uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000006DA0D5uLL},
+{0x0747AE1400000001uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000001uLL},
+{0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x0747AE1400000002uLL, 0x0000000000000000uLL},
+{0x0747AE1400000002uLL, 0x0000000000000002uLL, 0x03A3D70A00000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000002uLL, 0x0000000000000003uLL, 0x026D3A06AAAAAAABuLL, 0x0000000000000001uLL},
+{0x0747AE1400000002uLL, 0x0000000000000010uLL, 0x00747AE140000000uLL, 0x0000000000000002uLL},
+{0x0747AE1400000002uLL, 0x00000000078644FAuLL, 0x00000000F7AE911DuLL, 0x0000000000CC95B0uLL},
+{0x0747AE1400000002uLL, 0x000000000747AE14uLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0x0747AE1400000002uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x000000000E8F5C2AuLL},
+{0x0747AE1400000002uLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x0000000000000002uLL},
+{0x0747AE1400000002uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000015D70A3EuLL},
+{0x0747AE1400000002uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000000E8F5C2AuLL},
+{0x0747AE1400000002uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000747AE16uLL},
+{0x0747AE1400000002uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000000000002uLL},
+{0x0747AE1400000002uLL, 0x0000000100000001uLL, 0x000000000747AE13uLL, 0x00000000F8B851EFuLL},
+{0x0747AE1400000002uLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F170A3DCuLL},
+{0x0747AE1400000002uLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000EA28F5C9uLL},
+{0x0747AE1400000002uLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x000000008B851ED2uLL},
+{0x0747AE1400000002uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000000C50D07CuLL},
+{0x0747AE1400000002uLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000CD13E91EuLL},
+{0x0747AE1400000002uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000084DA740FuLL},
+{0x0747AE1400000002uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x0000000080000002uLL},
+{0x0747AE1400000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000000AEB8520uLL},
+{0x0747AE1400000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000747AE16uLL},
+{0x0747AE1400000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000003A3D70CuLL},
+{0x0747AE1400000002uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x0000000000000002uLL},
+{0x0747AE1400000002uLL, 0x0000000200000001uLL, 0x0000000003A3D709uLL, 0x00000001FC5C28F9uLL},
+{0x0747AE1400000002uLL, 0x0000000200000002uLL, 0x0000000003A3D709uLL, 0x00000001F8B851F0uLL},
+{0x0747AE1400000002uLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001F5147AE7uLL},
+{0x0747AE1400000002uLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001C5C28F72uLL},
+{0x0747AE1400000002uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007847CB08uLL},
+{0x0747AE1400000002uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x000000014B152C2EuLL},
+{0x0747AE1400000002uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x0000000202E978D6uLL},
+{0x0747AE1400000002uLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x0000000200000002uLL},
+{0x0747AE1400000002uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020747AE14uLL},
+{0x0747AE1400000002uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000204DA740EuLL},
+{0x0747AE1400000002uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002026D3A08uLL},
+{0x0747AE1400000002uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x0000000200000002uLL},
+{0x0747AE1400000002uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000001FD92C5FCuLL},
+{0x0747AE1400000002uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000001FB258BF6uLL},
+{0x0747AE1400000002uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000001F8B851F0uLL},
+{0x0747AE1400000002uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001D92C5FA2uLL},
+{0x0747AE1400000002uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018425ED08uLL},
+{0x0747AE1400000002uLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F112E8A6uLL},
+{0x0747AE1400000002uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000082147AE3uLL},
+{0x0747AE1400000002uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x0000000080000002uLL},
+{0x0747AE1400000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000575C291uLL},
+{0x0747AE1400000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000003A3D70CuLL},
+{0x0747AE1400000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000001D1EB87uLL},
+{0x0747AE1400000002uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x0000000400000002uLL},
+{0x0747AE1400000002uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000003FF8B8521uLL},
+{0x0747AE1400000002uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000003FF170A40uLL},
+{0x0747AE1400000002uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000003FEA28F5FuLL},
+{0x0747AE1400000002uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000003F8B851F2uLL},
+{0x0747AE1400000002uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B94A5DA34uLL},
+{0x0747AE1400000002uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BB84C4A8EuLL},
+{0x0747AE1400000002uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000008070F349uLL},
+{0x0747AE1400000002uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x0000000080000002uLL},
+{0x0747AE1400000002uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000000148E27EuLL},
+{0x0747AE1400000002uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000000DB41AAuLL},
+{0x0747AE1400000002uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000006DA0D6uLL},
+{0x0747AE1400000002uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0747AE1400000002uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000002uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000002uLL},
+{0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x0747AE1400000003uLL, 0x0000000000000000uLL},
+{0x0747AE1400000003uLL, 0x0000000000000002uLL, 0x03A3D70A00000001uLL, 0x0000000000000001uLL},
+{0x0747AE1400000003uLL, 0x0000000000000003uLL, 0x026D3A06AAAAAAABuLL, 0x0000000000000002uLL},
+{0x0747AE1400000003uLL, 0x0000000000000010uLL, 0x00747AE140000000uLL, 0x0000000000000003uLL},
+{0x0747AE1400000003uLL, 0x00000000078644FAuLL, 0x00000000F7AE911DuLL, 0x0000000000CC95B1uLL},
+{0x0747AE1400000003uLL, 0x000000000747AE14uLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0x0747AE1400000003uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x000000000E8F5C2BuLL},
+{0x0747AE1400000003uLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x0000000000000003uLL},
+{0x0747AE1400000003uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000015D70A3FuLL},
+{0x0747AE1400000003uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000000E8F5C2BuLL},
+{0x0747AE1400000003uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000747AE17uLL},
+{0x0747AE1400000003uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000000000003uLL},
+{0x0747AE1400000003uLL, 0x0000000100000001uLL, 0x000000000747AE13uLL, 0x00000000F8B851F0uLL},
+{0x0747AE1400000003uLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F170A3DDuLL},
+{0x0747AE1400000003uLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000EA28F5CAuLL},
+{0x0747AE1400000003uLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x000000008B851ED3uLL},
+{0x0747AE1400000003uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000000C50D07DuLL},
+{0x0747AE1400000003uLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000CD13E91FuLL},
+{0x0747AE1400000003uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000084DA7410uLL},
+{0x0747AE1400000003uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x0000000080000003uLL},
+{0x0747AE1400000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000000AEB8521uLL},
+{0x0747AE1400000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000747AE17uLL},
+{0x0747AE1400000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000003A3D70DuLL},
+{0x0747AE1400000003uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x0000000000000003uLL},
+{0x0747AE1400000003uLL, 0x0000000200000001uLL, 0x0000000003A3D709uLL, 0x00000001FC5C28FAuLL},
+{0x0747AE1400000003uLL, 0x0000000200000002uLL, 0x0000000003A3D709uLL, 0x00000001F8B851F1uLL},
+{0x0747AE1400000003uLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001F5147AE8uLL},
+{0x0747AE1400000003uLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001C5C28F73uLL},
+{0x0747AE1400000003uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007847CB09uLL},
+{0x0747AE1400000003uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x000000014B152C2FuLL},
+{0x0747AE1400000003uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x0000000202E978D7uLL},
+{0x0747AE1400000003uLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x0000000200000003uLL},
+{0x0747AE1400000003uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020747AE15uLL},
+{0x0747AE1400000003uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000204DA740FuLL},
+{0x0747AE1400000003uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002026D3A09uLL},
+{0x0747AE1400000003uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x0000000200000003uLL},
+{0x0747AE1400000003uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000001FD92C5FDuLL},
+{0x0747AE1400000003uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000001FB258BF7uLL},
+{0x0747AE1400000003uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000001F8B851F1uLL},
+{0x0747AE1400000003uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001D92C5FA3uLL},
+{0x0747AE1400000003uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018425ED09uLL},
+{0x0747AE1400000003uLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F112E8A7uLL},
+{0x0747AE1400000003uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000082147AE4uLL},
+{0x0747AE1400000003uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x0000000080000003uLL},
+{0x0747AE1400000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000575C292uLL},
+{0x0747AE1400000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000003A3D70DuLL},
+{0x0747AE1400000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000001D1EB88uLL},
+{0x0747AE1400000003uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x0000000400000003uLL},
+{0x0747AE1400000003uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000003FF8B8522uLL},
+{0x0747AE1400000003uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000003FF170A41uLL},
+{0x0747AE1400000003uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000003FEA28F60uLL},
+{0x0747AE1400000003uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000003F8B851F3uLL},
+{0x0747AE1400000003uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B94A5DA35uLL},
+{0x0747AE1400000003uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BB84C4A8FuLL},
+{0x0747AE1400000003uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000008070F34AuLL},
+{0x0747AE1400000003uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x0000000080000003uLL},
+{0x0747AE1400000003uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000000148E27FuLL},
+{0x0747AE1400000003uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000000DB41ABuLL},
+{0x0747AE1400000003uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000006DA0D7uLL},
+{0x0747AE1400000003uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0747AE1400000003uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0747AE1400000003uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000003uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000003uLL},
+{0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x0747AE1400000010uLL, 0x0000000000000000uLL},
+{0x0747AE1400000010uLL, 0x0000000000000002uLL, 0x03A3D70A00000008uLL, 0x0000000000000000uLL},
+{0x0747AE1400000010uLL, 0x0000000000000003uLL, 0x026D3A06AAAAAAB0uLL, 0x0000000000000000uLL},
+{0x0747AE1400000010uLL, 0x0000000000000010uLL, 0x00747AE140000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000010uLL, 0x00000000078644FAuLL, 0x00000000F7AE911DuLL, 0x0000000000CC95BEuLL},
+{0x0747AE1400000010uLL, 0x000000000747AE14uLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0x0747AE1400000010uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x000000000E8F5C38uLL},
+{0x0747AE1400000010uLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x0000000000000010uLL},
+{0x0747AE1400000010uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000015D70A4CuLL},
+{0x0747AE1400000010uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000000E8F5C38uLL},
+{0x0747AE1400000010uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000747AE24uLL},
+{0x0747AE1400000010uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000000000010uLL},
+{0x0747AE1400000010uLL, 0x0000000100000001uLL, 0x000000000747AE13uLL, 0x00000000F8B851FDuLL},
+{0x0747AE1400000010uLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F170A3EAuLL},
+{0x0747AE1400000010uLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000EA28F5D7uLL},
+{0x0747AE1400000010uLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x000000008B851EE0uLL},
+{0x0747AE1400000010uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000000C50D08AuLL},
+{0x0747AE1400000010uLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000CD13E92CuLL},
+{0x0747AE1400000010uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000084DA741DuLL},
+{0x0747AE1400000010uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x0000000080000010uLL},
+{0x0747AE1400000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000000AEB852EuLL},
+{0x0747AE1400000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000747AE24uLL},
+{0x0747AE1400000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000003A3D71AuLL},
+{0x0747AE1400000010uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x0000000000000010uLL},
+{0x0747AE1400000010uLL, 0x0000000200000001uLL, 0x0000000003A3D709uLL, 0x00000001FC5C2907uLL},
+{0x0747AE1400000010uLL, 0x0000000200000002uLL, 0x0000000003A3D709uLL, 0x00000001F8B851FEuLL},
+{0x0747AE1400000010uLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001F5147AF5uLL},
+{0x0747AE1400000010uLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001C5C28F80uLL},
+{0x0747AE1400000010uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007847CB16uLL},
+{0x0747AE1400000010uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x000000014B152C3CuLL},
+{0x0747AE1400000010uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x0000000202E978E4uLL},
+{0x0747AE1400000010uLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x0000000200000010uLL},
+{0x0747AE1400000010uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020747AE22uLL},
+{0x0747AE1400000010uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000204DA741CuLL},
+{0x0747AE1400000010uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002026D3A16uLL},
+{0x0747AE1400000010uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x0000000200000010uLL},
+{0x0747AE1400000010uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000001FD92C60AuLL},
+{0x0747AE1400000010uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000001FB258C04uLL},
+{0x0747AE1400000010uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000001F8B851FEuLL},
+{0x0747AE1400000010uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001D92C5FB0uLL},
+{0x0747AE1400000010uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018425ED16uLL},
+{0x0747AE1400000010uLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F112E8B4uLL},
+{0x0747AE1400000010uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000082147AF1uLL},
+{0x0747AE1400000010uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x0000000080000010uLL},
+{0x0747AE1400000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000575C29FuLL},
+{0x0747AE1400000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000003A3D71AuLL},
+{0x0747AE1400000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000001D1EB95uLL},
+{0x0747AE1400000010uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x0000000400000010uLL},
+{0x0747AE1400000010uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000003FF8B852FuLL},
+{0x0747AE1400000010uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000003FF170A4EuLL},
+{0x0747AE1400000010uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000003FEA28F6DuLL},
+{0x0747AE1400000010uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000003F8B85200uLL},
+{0x0747AE1400000010uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B94A5DA42uLL},
+{0x0747AE1400000010uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BB84C4A9CuLL},
+{0x0747AE1400000010uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000008070F357uLL},
+{0x0747AE1400000010uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x0000000080000010uLL},
+{0x0747AE1400000010uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000000148E28CuLL},
+{0x0747AE1400000010uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000000DB41B8uLL},
+{0x0747AE1400000010uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000006DA0E4uLL},
+{0x0747AE1400000010uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x0747AE1400000010uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x0747AE1400000010uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x0747AE1400000010uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE1400000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE1400000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1400000010uLL},
+{0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL},
+{0x0747AE14078644FAuLL, 0x0000000000000002uLL, 0x03A3D70A03C3227DuLL, 0x0000000000000000uLL},
+{0x0747AE14078644FAuLL, 0x0000000000000003uLL, 0x026D3A06AD2CC1A8uLL, 0x0000000000000002uLL},
+{0x0747AE14078644FAuLL, 0x0000000000000010uLL, 0x00747AE14078644FuLL, 0x000000000000000AuLL},
+{0x0747AE14078644FAuLL, 0x00000000078644FAuLL, 0x00000000F7AE911EuLL, 0x0000000000CC95AEuLL},
+{0x0747AE14078644FAuLL, 0x000000000747AE14uLL, 0x0000000100000001uLL, 0x00000000003E96E6uLL},
+{0x0747AE14078644FAuLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x000000001615A122uLL},
+{0x0747AE14078644FAuLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x00000000078644FAuLL},
+{0x0747AE14078644FAuLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000001D5D4F36uLL},
+{0x0747AE14078644FAuLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000001615A122uLL},
+{0x0747AE14078644FAuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000ECDF30EuLL},
+{0x0747AE14078644FAuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x00000000078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x00000000003E96E6uLL},
+{0x0747AE14078644FAuLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F8F6E8D4uLL},
+{0x0747AE14078644FAuLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000F1AF3AC1uLL},
+{0x0747AE14078644FAuLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x00000000930B63CAuLL},
+{0x0747AE14078644FAuLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x0000000013D71574uLL},
+{0x0747AE14078644FAuLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000D49A2E16uLL},
+{0x0747AE14078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x000000008C60B907uLL},
+{0x0747AE14078644FAuLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x00000000878644FAuLL},
+{0x0747AE14078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000001271CA18uLL},
+{0x0747AE14078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000ECDF30EuLL},
+{0x0747AE14078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x000000000B2A1C04uLL},
+{0x0747AE14078644FAuLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x00000000078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x0000000003E26DF0uLL},
+{0x0747AE14078644FAuLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x00000000003E96E6uLL},
+{0x0747AE14078644FAuLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001FC9ABFDFuLL},
+{0x0747AE14078644FAuLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001CD48D46AuLL},
+{0x0747AE14078644FAuLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007FCE1000uLL},
+{0x0747AE14078644FAuLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x00000001529B7126uLL},
+{0x0747AE14078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x000000020A6FBDCEuLL},
+{0x0747AE14078644FAuLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x00000002078644FAuLL},
+{0x0747AE14078644FAuLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020ECDF30CuLL},
+{0x0747AE14078644FAuLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x000000020C60B906uLL},
+{0x0747AE14078644FAuLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x0000000209F37F00uLL},
+{0x0747AE14078644FAuLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x00000002078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x0000000205190AF4uLL},
+{0x0747AE14078644FAuLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x0000000202ABD0EEuLL},
+{0x0747AE14078644FAuLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000002003E96E8uLL},
+{0x0747AE14078644FAuLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001E0B2A49AuLL},
+{0x0747AE14078644FAuLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018BAC3200uLL},
+{0x0747AE14078644FAuLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F8992D9EuLL},
+{0x0747AE14078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x00000000899ABFDBuLL},
+{0x0747AE14078644FAuLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x00000000878644FAuLL},
+{0x0747AE14078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000CFC0789uLL},
+{0x0747AE14078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x000000000B2A1C04uLL},
+{0x0747AE14078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x000000000958307FuLL},
+{0x0747AE14078644FAuLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x00000004078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x000000040711CA19uLL},
+{0x0747AE14078644FAuLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000004069D4F38uLL},
+{0x0747AE14078644FAuLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x000000040628D457uLL},
+{0x0747AE14078644FAuLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000004003E96EAuLL},
+{0x0747AE14078644FAuLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B9C2C1F2CuLL},
+{0x0747AE14078644FAuLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BBFD28F86uLL},
+{0x0747AE14078644FAuLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x0000000087F73841uLL},
+{0x0747AE14078644FAuLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x00000000878644FAuLL},
+{0x0747AE14078644FAuLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x0000000008CF2776uLL},
+{0x0747AE14078644FAuLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x00000000086186A2uLL},
+{0x0747AE14078644FAuLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x0000000007F3E5CEuLL},
+{0x0747AE14078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x0747AE14078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x0747AE14078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x0747AE14078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE14078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x0747AE14078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE14078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14078644FAuLL},
+{0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000000uLL},
+{0x0747AE140747AE14uLL, 0x0000000000000002uLL, 0x03A3D70A03A3D70AuLL, 0x0000000000000000uLL},
+{0x0747AE140747AE14uLL, 0x0000000000000003uLL, 0x026D3A06AD17E4B1uLL, 0x0000000000000001uLL},
+{0x0747AE140747AE14uLL, 0x0000000000000010uLL, 0x00747AE140747AE1uLL, 0x0000000000000004uLL},
+{0x0747AE140747AE14uLL, 0x00000000078644FAuLL, 0x00000000F7AE911EuLL, 0x00000000008DFEC8uLL},
+{0x0747AE140747AE14uLL, 0x000000000747AE14uLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x0747AE140747AE14uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C28uLL, 0x0000000015D70A3CuLL},
+{0x0747AE140747AE14uLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x000000000747AE14uLL},
+{0x0747AE140747AE14uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000001D1EB850uLL},
+{0x0747AE140747AE14uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x0000000015D70A3CuLL},
+{0x0747AE140747AE14uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000000E8F5C28uLL},
+{0x0747AE140747AE14uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x000000000747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x0000000000000000uLL},
+{0x0747AE140747AE14uLL, 0x0000000100000002uLL, 0x000000000747AE13uLL, 0x00000000F8B851EEuLL},
+{0x0747AE140747AE14uLL, 0x0000000100000003uLL, 0x000000000747AE13uLL, 0x00000000F170A3DBuLL},
+{0x0747AE140747AE14uLL, 0x0000000100000010uLL, 0x000000000747AE13uLL, 0x0000000092CCCCE4uLL},
+{0x0747AE140747AE14uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x0000000013987E8EuLL},
+{0x0747AE140747AE14uLL, 0x000000010747AE14uLL, 0x00000000071425A5uLL, 0x00000000D45B9730uLL},
+{0x0747AE140747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x000000008C222221uLL},
+{0x0747AE140747AE14uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x000000008747AE14uLL},
+{0x0747AE140747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x0000000012333332uLL},
+{0x0747AE140747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000000E8F5C28uLL},
+{0x0747AE140747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x000000000AEB851EuLL},
+{0x0747AE140747AE14uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x000000000747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x0000000003A3D70AuLL},
+{0x0747AE140747AE14uLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x0000000000000000uLL},
+{0x0747AE140747AE14uLL, 0x0000000200000003uLL, 0x0000000003A3D709uLL, 0x00000001FC5C28F9uLL},
+{0x0747AE140747AE14uLL, 0x0000000200000010uLL, 0x0000000003A3D709uLL, 0x00000001CD0A3D84uLL},
+{0x0747AE140747AE14uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000007F8F791AuLL},
+{0x0747AE140747AE14uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x00000001525CDA40uLL},
+{0x0747AE140747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D4uLL, 0x000000020A3126E8uLL},
+{0x0747AE140747AE14uLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x000000020747AE14uLL},
+{0x0747AE140747AE14uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000020E8F5C26uLL},
+{0x0747AE140747AE14uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x000000020C222220uLL},
+{0x0747AE140747AE14uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x0000000209B4E81AuLL},
+{0x0747AE140747AE14uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x000000020747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x0000000204DA740EuLL},
+{0x0747AE140747AE14uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000002026D3A08uLL},
+{0x0747AE140747AE14uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x0000000200000002uLL},
+{0x0747AE140747AE14uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000001E0740DB4uLL},
+{0x0747AE140747AE14uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000018B6D9B1AuLL},
+{0x0747AE140747AE14uLL, 0x000000030747AE14uLL, 0x00000000026764ABuLL, 0x00000002F85A96B8uLL},
+{0x0747AE140747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x00000000895C28F5uLL},
+{0x0747AE140747AE14uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x000000008747AE14uLL},
+{0x0747AE140747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000000CBD70A3uLL},
+{0x0747AE140747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x000000000AEB851EuLL},
+{0x0747AE140747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000009199999uLL},
+{0x0747AE140747AE14uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x000000040747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x0000000406D33333uLL},
+{0x0747AE140747AE14uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000004065EB852uLL},
+{0x0747AE140747AE14uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x0000000405EA3D71uLL},
+{0x0747AE140747AE14uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x0000000400000004uLL},
+{0x0747AE140747AE14uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000B9BED8846uLL},
+{0x0747AE140747AE14uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000BBF93F8A0uLL},
+{0x0747AE140747AE14uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x0000000087B8A15BuLL},
+{0x0747AE140747AE14uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x000000008747AE14uLL},
+{0x0747AE140747AE14uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x0000000008909090uLL},
+{0x0747AE140747AE14uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x000000000822EFBCuLL},
+{0x0747AE140747AE14uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x0000000007B54EE8uLL},
+{0x0747AE140747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x0747AE140747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x0747AE140747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x0747AE140747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x0747AE140747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE140747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE140747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE140747AE14uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000000uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000000000002uLL, 0x03A3D70A3FFFFFFFuLL, 0x0000000000000001uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000000000003uLL, 0x026D3A06D5555555uLL, 0x0000000000000000uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000000000010uLL, 0x00747AE147FFFFFFuLL, 0x000000000000000FuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000F7AE912EuLL, 0x0000000000E20113uLL},
+{0x0747AE147FFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000100000011uLL, 0x00000000043D70ABuLL},
+{0x0747AE147FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C29uLL, 0x000000000E8F5C28uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000080000000uLL, 0x000000000E8F5C28uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000095D70A3BuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000008E8F5C27uLL},
+{0x0747AE147FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000008747AE13uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x0000000078B851EBuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000100000002uLL, 0x000000000747AE14uLL, 0x000000007170A3D7uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000100000003uLL, 0x000000000747AE14uLL, 0x000000006A28F5C3uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000100000010uLL, 0x000000000747AE14uLL, 0x000000000B851EBFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000008C50D079uLL},
+{0x0747AE147FFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000071425A6uLL, 0x0000000045CC3B07uLL},
+{0x0747AE147FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000104DA740CuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x00000000FFFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000008AEB851DuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000008747AE13uLL},
+{0x0747AE147FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000083A3D709uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x000000007FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x000000007C5C28F5uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x0000000078B851EBuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000003A3D70AuLL, 0x0000000075147AE1uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000200000010uLL, 0x0000000003A3D70AuLL, 0x0000000045C28F5FuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x00000000F847CB05uLL},
+{0x0747AE147FFFFFFFuLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x00000001CB152C2BuLL},
+{0x0747AE147FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D5uLL, 0x0000000002E978D4uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000002E978D4uLL, 0x000000027FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000028747AE11uLL},
+{0x0747AE147FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000284DA740BuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002826D3A05uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x000000027FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x000000027D92C5F9uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x000000027B258BF3uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x0000000278B851EDuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000002592C5F9FuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000020425ED05uLL},
+{0x0747AE147FFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000026764ACuLL, 0x0000000069CB3A8FuLL},
+{0x0747AE147FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000102147AE0uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x00000000FFFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000008575C28EuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000083A3D709uLL},
+{0x0747AE147FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000081D1EB84uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x000000047FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x000000047F8B851EuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x000000047F170A3DuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x000000047EA28F5CuLL},
+{0x0747AE147FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x0000000478B851EFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000C14A5DA31uLL},
+{0x0747AE147FFFFFFFuLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000C384C4A8BuLL},
+{0x0747AE147FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000010070F346uLL},
+{0x0747AE147FFFFFFFuLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x00000000FFFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000008148E27BuLL},
+{0x0747AE147FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000080DB41A7uLL},
+{0x0747AE147FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000806DA0D3uLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE147FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE147FFFFFFFuLL},
+{0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x0747AE1480000000uLL, 0x0000000000000000uLL},
+{0x0747AE1480000000uLL, 0x0000000000000002uLL, 0x03A3D70A40000000uLL, 0x0000000000000000uLL},
+{0x0747AE1480000000uLL, 0x0000000000000003uLL, 0x026D3A06D5555555uLL, 0x0000000000000001uLL},
+{0x0747AE1480000000uLL, 0x0000000000000010uLL, 0x00747AE148000000uLL, 0x0000000000000000uLL},
+{0x0747AE1480000000uLL, 0x00000000078644FAuLL, 0x00000000F7AE912EuLL, 0x0000000000E20114uLL},
+{0x0747AE1480000000uLL, 0x000000000747AE14uLL, 0x0000000100000011uLL, 0x00000000043D70ACuLL},
+{0x0747AE1480000000uLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C29uLL, 0x000000000E8F5C29uLL},
+{0x0747AE1480000000uLL, 0x0000000080000000uLL, 0x000000000E8F5C29uLL, 0x0000000000000000uLL},
+{0x0747AE1480000000uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000095D70A3CuLL},
+{0x0747AE1480000000uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000008E8F5C28uLL},
+{0x0747AE1480000000uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000008747AE14uLL},
+{0x0747AE1480000000uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x0000000080000000uLL},
+{0x0747AE1480000000uLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x0000000078B851ECuLL},
+{0x0747AE1480000000uLL, 0x0000000100000002uLL, 0x000000000747AE14uLL, 0x000000007170A3D8uLL},
+{0x0747AE1480000000uLL, 0x0000000100000003uLL, 0x000000000747AE14uLL, 0x000000006A28F5C4uLL},
+{0x0747AE1480000000uLL, 0x0000000100000010uLL, 0x000000000747AE14uLL, 0x000000000B851EC0uLL},
+{0x0747AE1480000000uLL, 0x00000001078644FAuLL, 0x000000000712773FuLL, 0x000000008C50D07AuLL},
+{0x0747AE1480000000uLL, 0x000000010747AE14uLL, 0x00000000071425A6uLL, 0x0000000045CC3B08uLL},
+{0x0747AE1480000000uLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740DuLL, 0x0000000104DA740DuLL},
+{0x0747AE1480000000uLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x0000000100000000uLL},
+{0x0747AE1480000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000008AEB851EuLL},
+{0x0747AE1480000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000008747AE14uLL},
+{0x0747AE1480000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000083A3D70AuLL},
+{0x0747AE1480000000uLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x0000000080000000uLL},
+{0x0747AE1480000000uLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x000000007C5C28F6uLL},
+{0x0747AE1480000000uLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x0000000078B851ECuLL},
+{0x0747AE1480000000uLL, 0x0000000200000003uLL, 0x0000000003A3D70AuLL, 0x0000000075147AE2uLL},
+{0x0747AE1480000000uLL, 0x0000000200000010uLL, 0x0000000003A3D70AuLL, 0x0000000045C28F60uLL},
+{0x0747AE1480000000uLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x00000000F847CB06uLL},
+{0x0747AE1480000000uLL, 0x000000020747AE14uLL, 0x000000000396C6B1uLL, 0x00000001CB152C2CuLL},
+{0x0747AE1480000000uLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D5uLL, 0x0000000002E978D5uLL},
+{0x0747AE1480000000uLL, 0x0000000280000000uLL, 0x0000000002E978D5uLL, 0x0000000000000000uLL},
+{0x0747AE1480000000uLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A06uLL, 0x000000028747AE12uLL},
+{0x0747AE1480000000uLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A06uLL, 0x0000000284DA740CuLL},
+{0x0747AE1480000000uLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A06uLL, 0x00000002826D3A06uLL},
+{0x0747AE1480000000uLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x0000000280000000uLL},
+{0x0747AE1480000000uLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x000000027D92C5FAuLL},
+{0x0747AE1480000000uLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x000000027B258BF4uLL},
+{0x0747AE1480000000uLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x0000000278B851EEuLL},
+{0x0747AE1480000000uLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000002592C5FA0uLL},
+{0x0747AE1480000000uLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000020425ED06uLL},
+{0x0747AE1480000000uLL, 0x000000030747AE14uLL, 0x00000000026764ACuLL, 0x0000000069CB3A90uLL},
+{0x0747AE1480000000uLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000102147AE1uLL},
+{0x0747AE1480000000uLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x0000000100000000uLL},
+{0x0747AE1480000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000008575C28FuLL},
+{0x0747AE1480000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000083A3D70AuLL},
+{0x0747AE1480000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000081D1EB85uLL},
+{0x0747AE1480000000uLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x0000000480000000uLL},
+{0x0747AE1480000000uLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x000000047F8B851FuLL},
+{0x0747AE1480000000uLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x000000047F170A3EuLL},
+{0x0747AE1480000000uLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x000000047EA28F5DuLL},
+{0x0747AE1480000000uLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x0000000478B851F0uLL},
+{0x0747AE1480000000uLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000C14A5DA32uLL},
+{0x0747AE1480000000uLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000C384C4A8CuLL},
+{0x0747AE1480000000uLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000010070F347uLL},
+{0x0747AE1480000000uLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x0000000100000000uLL},
+{0x0747AE1480000000uLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000008148E27CuLL},
+{0x0747AE1480000000uLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000080DB41A8uLL},
+{0x0747AE1480000000uLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000000806DA0D4uLL},
+{0x0747AE1480000000uLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0747AE1480000000uLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE1480000000uLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0747AE1480000000uLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0747AE1480000000uLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x0747AE1480000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x0747AE1480000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x0747AE1480000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0747AE1480000000uLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE1480000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE1480000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE1480000000uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000000000002uLL, 0x03A3D70A7FFFFFFEuLL, 0x0000000000000001uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000000000003uLL, 0x026D3A06FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000000000010uLL, 0x00747AE14FFFFFFFuLL, 0x000000000000000DuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000000078644FAuLL, 0x00000000F7AE913FuLL, 0x0000000000F76C77uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000000747AE14uLL, 0x0000000100000023uLL, 0x0000000001333341uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C2AuLL, 0x000000000E8F5C27uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000000E8F5C29uLL, 0x000000007FFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE15uLL, 0x0000000015D70A3CuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE15uLL, 0x000000000E8F5C27uLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE15uLL, 0x000000000747AE12uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x00000000FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x00000000F8B851E9uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000100000002uLL, 0x000000000747AE14uLL, 0x00000000F170A3D5uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000100000003uLL, 0x000000000747AE14uLL, 0x00000000EA28F5C1uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000100000010uLL, 0x000000000747AE14uLL, 0x000000008B851EBDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000001078644FAuLL, 0x0000000007127740uLL, 0x0000000004CA8B7DuLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000010747AE14uLL, 0x00000000071425A6uLL, 0x00000000C5CC3B05uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740EuLL, 0x0000000004DA740BuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x000000017FFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000010AEB851BuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000010747AE11uLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000103A3D707uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x00000000FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x00000000FC5C28F3uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x00000000F8B851E9uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000003A3D70AuLL, 0x00000000F5147ADFuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000200000010uLL, 0x0000000003A3D70AuLL, 0x00000000C5C28F5DuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000017847CB03uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000020747AE14uLL, 0x000000000396C6B2uLL, 0x0000000043CD7E15uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D5uLL, 0x0000000082E978D2uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000002E978D5uLL, 0x000000007FFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A07uLL, 0x000000000747AE12uLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A07uLL, 0x0000000004DA740BuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A07uLL, 0x00000000026D3A04uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x00000002FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000002FD92C5F7uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000002FB258BF1uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000002F8B851EBuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000002D92C5F9DuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000028425ED03uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000030747AE14uLL, 0x00000000026764ACuLL, 0x00000000E9CB3A8DuLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000182147ADEuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x000000017FFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000010575C28CuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000103A3D707uLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000101D1EB82uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x00000004FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000004FF8B851CuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000004FF170A3BuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000004FEA28F5AuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000004F8B851EDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000C94A5DA2FuLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000CB84C4A89uLL},
+{0x0747AE14FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000018070F344uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x000000017FFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000010148E279uLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000100DB41A5uLL},
+{0x0747AE14FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000001006DA0D1uLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFDuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000000000002uLL, 0x03A3D70A7FFFFFFFuLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000000000003uLL, 0x026D3A06FFFFFFFFuLL, 0x0000000000000001uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000000000010uLL, 0x00747AE14FFFFFFFuLL, 0x000000000000000EuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000000078644FAuLL, 0x00000000F7AE913FuLL, 0x0000000000F76C78uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000000747AE14uLL, 0x0000000100000023uLL, 0x0000000001333342uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C2AuLL, 0x000000000E8F5C28uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000080000000uLL, 0x000000000E8F5C29uLL, 0x000000007FFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE15uLL, 0x0000000015D70A3DuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE15uLL, 0x000000000E8F5C28uLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE15uLL, 0x000000000747AE13uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x00000000FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x00000000F8B851EAuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000100000002uLL, 0x000000000747AE14uLL, 0x00000000F170A3D6uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000100000003uLL, 0x000000000747AE14uLL, 0x00000000EA28F5C2uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000100000010uLL, 0x000000000747AE14uLL, 0x000000008B851EBEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000001078644FAuLL, 0x0000000007127740uLL, 0x0000000004CA8B7EuLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000010747AE14uLL, 0x00000000071425A6uLL, 0x00000000C5CC3B06uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740EuLL, 0x0000000004DA740CuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x000000017FFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000010AEB851CuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000010747AE12uLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000103A3D708uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x00000000FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x00000000FC5C28F4uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x00000000F8B851EAuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000003A3D70AuLL, 0x00000000F5147AE0uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000200000010uLL, 0x0000000003A3D70AuLL, 0x00000000C5C28F5EuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000017847CB04uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000020747AE14uLL, 0x000000000396C6B2uLL, 0x0000000043CD7E16uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D5uLL, 0x0000000082E978D3uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000002E978D5uLL, 0x000000007FFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A07uLL, 0x000000000747AE13uLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A07uLL, 0x0000000004DA740CuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A07uLL, 0x00000000026D3A05uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x00000002FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000002FD92C5F8uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000002FB258BF2uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000002F8B851ECuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000002D92C5F9EuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000028425ED04uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000030747AE14uLL, 0x00000000026764ACuLL, 0x00000000E9CB3A8EuLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000182147ADFuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x000000017FFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000010575C28DuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000103A3D708uLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000101D1EB83uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x00000004FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000004FF8B851DuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000004FF170A3CuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000004FEA28F5BuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000004F8B851EEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000C94A5DA30uLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000CB84C4A8AuLL},
+{0x0747AE14FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000018070F345uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x000000017FFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000010148E27AuLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000100DB41A6uLL},
+{0x0747AE14FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000001006DA0D2uLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFEuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000000000002uLL, 0x03A3D70A7FFFFFFFuLL, 0x0000000000000001uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000000000003uLL, 0x026D3A06FFFFFFFFuLL, 0x0000000000000002uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000000000010uLL, 0x00747AE14FFFFFFFuLL, 0x000000000000000FuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000000078644FAuLL, 0x00000000F7AE913FuLL, 0x0000000000F76C79uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000000747AE14uLL, 0x0000000100000023uLL, 0x0000000001333343uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000000E8F5C2AuLL, 0x000000000E8F5C29uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000000E8F5C29uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE15uLL, 0x0000000015D70A3EuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE15uLL, 0x000000000E8F5C29uLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE15uLL, 0x000000000747AE14uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL, 0x00000000FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000100000001uLL, 0x000000000747AE14uLL, 0x00000000F8B851EBuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000100000002uLL, 0x000000000747AE14uLL, 0x00000000F170A3D7uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000100000003uLL, 0x000000000747AE14uLL, 0x00000000EA28F5C3uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000100000010uLL, 0x000000000747AE14uLL, 0x000000008B851EBFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000001078644FAuLL, 0x0000000007127740uLL, 0x0000000004CA8B7FuLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000071425A6uLL, 0x00000000C5CC3B07uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000004DA740EuLL, 0x0000000004DA740DuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000004DA740DuLL, 0x000000017FFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000003A3D70AuLL, 0x000000010AEB851DuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000003A3D70AuLL, 0x000000010747AE13uLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000003A3D70AuLL, 0x0000000103A3D709uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000003A3D70AuLL, 0x00000000FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000003A3D70AuLL, 0x00000000FC5C28F5uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000003A3D70AuLL, 0x00000000F8B851EBuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000003A3D70AuLL, 0x00000000F5147AE1uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000200000010uLL, 0x0000000003A3D70AuLL, 0x00000000C5C28F5FuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000002078644FAuLL, 0x0000000003965801uLL, 0x000000017847CB05uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000020747AE14uLL, 0x000000000396C6B2uLL, 0x0000000043CD7E17uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000002E978D5uLL, 0x0000000082E978D4uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000002E978D5uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x00000000026D3A07uLL, 0x000000000747AE14uLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x00000000026D3A07uLL, 0x0000000004DA740DuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x00000000026D3A07uLL, 0x00000000026D3A06uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000300000000uLL, 0x00000000026D3A06uLL, 0x00000002FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000300000001uLL, 0x00000000026D3A06uLL, 0x00000002FD92C5F9uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000300000002uLL, 0x00000000026D3A06uLL, 0x00000002FB258BF3uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000300000003uLL, 0x00000000026D3A06uLL, 0x00000002F8B851EDuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000300000010uLL, 0x00000000026D3A06uLL, 0x00000002D92C5F9FuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000002673301uLL, 0x000000028425ED05uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000026764ACuLL, 0x00000000E9CB3A8FuLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000002147AE1uLL, 0x0000000182147AE0uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000002147AE1uLL, 0x000000017FFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000001D1EB85uLL, 0x000000010575C28EuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000001D1EB85uLL, 0x0000000103A3D709uLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000001D1EB85uLL, 0x0000000101D1EB84uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000000747AE1uLL, 0x00000004FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000000747AE1uLL, 0x00000004FF8B851EuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000000747AE1uLL, 0x00000004FF170A3DuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000000747AE1uLL, 0x00000004FEA28F5CuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000000747AE1uLL, 0x00000004F8B851EFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000000744433uLL, 0x0000000C94A5DA31uLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000100747AE14uLL, 0x00000000007445F9uLL, 0x0000000CB84C4A8BuLL},
+{0x0747AE14FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000070F347uLL, 0x000000018070F346uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0000001080000000uLL, 0x000000000070F347uLL, 0x000000017FFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x00000000006DA0D4uLL, 0x000000010148E27BuLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x00000000006DA0D4uLL, 0x0000000100DB41A7uLL},
+{0x0747AE14FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x00000000006DA0D4uLL, 0x00000001006DA0D3uLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x0747AE14FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x0747AE14FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x0747AE14FFFFFFFFuLL},
+{0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x3FFFFFFF80000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000000000003uLL, 0x2AAAAAAA55555555uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000000000010uLL, 0x07FFFFFFF0000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000000078644FAuLL, 0x0000001102D8BD5CuLL, 0x0000000003E2A428uLL},
+{0x7FFFFFFF00000000uLL, 0x000000000747AE14uLL, 0x000000119519529AuLL, 0x00000000052ADFF8uLL},
+{0x7FFFFFFF00000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFF00000000uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000002uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000004uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x0000000080000009uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x0000000000000090uLL},
+{0x7FFFFFFF00000000uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x000000005544910EuLL},
+{0x7FFFFFFF00000000uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x0000000024619090uLL},
+{0x7FFFFFFF00000000uLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555554uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x0000000100000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFDuLL},
+{0x7FFFFFFF00000000uLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000017FFFFFFEuLL},
+{0x7FFFFFFF00000000uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000013FFFFFFFuLL},
+{0x7FFFFFFF00000000uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x0000000100000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000001uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000080000002uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000040000003uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x0000000100000030uLL},
+{0x7FFFFFFF00000000uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001290A84D8uLL},
+{0x7FFFFFFF00000000uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000032B07784uLL},
+{0x7FFFFFFF00000000uLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x0000000233333332uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x0000000200000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000017FFFFFFEuLL},
+{0x7FFFFFFF00000000uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000155555554uLL},
+{0x7FFFFFFF00000000uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAAAAuLL},
+{0x7FFFFFFF00000000uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000100000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000D5555556uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000AAAAAAACuLL},
+{0x7FFFFFFF00000000uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000080000002uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000155555570uLL},
+{0x7FFFFFFF00000000uLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002A39634D2uLL},
+{0x7FFFFFFF00000000uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000620B044uLL},
+{0x7FFFFFFF00000000uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000124924924uLL},
+{0x7FFFFFFF00000000uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000100000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x000000035FFFFFFDuLL},
+{0x7FFFFFFF00000000uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x000000033FFFFFFEuLL},
+{0x7FFFFFFF00000000uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x000000031FFFFFFFuLL},
+{0x7FFFFFFF00000000uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EF8000001uLL},
+{0x7FFFFFFF00000000uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF0000002uLL},
+{0x7FFFFFFF00000000uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EE8000003uLL},
+{0x7FFFFFFF00000000uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E80000010uLL},
+{0x7FFFFFFF00000000uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000903C212C6uLL},
+{0x7FFFFFFF00000000uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000223D54BC0uLL},
+{0x7FFFFFFF00000000uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000107C1F07CuLL},
+{0x7FFFFFFF00000000uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000100000000uLL},
+{0x7FFFFFFF00000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000816969695uLL},
+{0x7FFFFFFF00000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000080F0F0F0EuLL},
+{0x7FFFFFFF00000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000807878787uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6500000000uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFEFuLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFDEuLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFCDuLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B64FFFFFEF0uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6480156B66uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B64843D70ACuLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C80000011uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C80000000uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5400000033uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5400000022uLL},
+{0x7FFFFFFF00000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5400000011uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFEFuLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFDEuLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFCDuLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFEF0uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA80156B66uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA843D70ACuLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A280000011uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A280000000uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A00000033uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A00000022uLL},
+{0x7FFFFFFF00000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A00000011uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000000uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x3FFFFFFF80000000uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000000000003uLL, 0x2AAAAAAA55555555uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000000000010uLL, 0x07FFFFFFF0000000uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000000078644FAuLL, 0x0000001102D8BD5CuLL, 0x0000000003E2A429uLL},
+{0x7FFFFFFF00000001uLL, 0x000000000747AE14uLL, 0x000000119519529AuLL, 0x00000000052ADFF9uLL},
+{0x7FFFFFFF00000001uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000003uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000005uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x000000008000000AuLL},
+{0x7FFFFFFF00000001uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x0000000000000091uLL},
+{0x7FFFFFFF00000001uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x000000005544910FuLL},
+{0x7FFFFFFF00000001uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x0000000024619091uLL},
+{0x7FFFFFFF00000001uLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555555uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x0000000100000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFEuLL},
+{0x7FFFFFFF00000001uLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF00000001uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000140000000uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x0000000100000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000002uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000080000003uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000040000004uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x0000000100000031uLL},
+{0x7FFFFFFF00000001uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001290A84D9uLL},
+{0x7FFFFFFF00000001uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000032B07785uLL},
+{0x7FFFFFFF00000001uLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x0000000233333333uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x0000000200000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF00000001uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000155555555uLL},
+{0x7FFFFFFF00000001uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAAABuLL},
+{0x7FFFFFFF00000001uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000100000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000D5555557uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000AAAAAAADuLL},
+{0x7FFFFFFF00000001uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000080000003uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000155555571uLL},
+{0x7FFFFFFF00000001uLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002A39634D3uLL},
+{0x7FFFFFFF00000001uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000620B045uLL},
+{0x7FFFFFFF00000001uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000124924925uLL},
+{0x7FFFFFFF00000001uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000100000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x000000035FFFFFFEuLL},
+{0x7FFFFFFF00000001uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x000000033FFFFFFFuLL},
+{0x7FFFFFFF00000001uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x0000000320000000uLL},
+{0x7FFFFFFF00000001uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EF8000002uLL},
+{0x7FFFFFFF00000001uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF0000003uLL},
+{0x7FFFFFFF00000001uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EE8000004uLL},
+{0x7FFFFFFF00000001uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E80000011uLL},
+{0x7FFFFFFF00000001uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000903C212C7uLL},
+{0x7FFFFFFF00000001uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000223D54BC1uLL},
+{0x7FFFFFFF00000001uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000107C1F07DuLL},
+{0x7FFFFFFF00000001uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000100000001uLL},
+{0x7FFFFFFF00000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000816969696uLL},
+{0x7FFFFFFF00000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000080F0F0F0FuLL},
+{0x7FFFFFFF00000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000807878788uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6500000001uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFF0uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFDFuLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFCEuLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B64FFFFFEF1uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6480156B67uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B64843D70ADuLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C80000012uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C80000001uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5400000034uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5400000023uLL},
+{0x7FFFFFFF00000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5400000012uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFF0uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFDFuLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFCEuLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFEF1uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA80156B67uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA843D70ADuLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A280000012uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A280000001uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A00000034uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A00000023uLL},
+{0x7FFFFFFF00000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A00000012uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000001uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x3FFFFFFF80000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000000000003uLL, 0x2AAAAAAA55555556uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000000000010uLL, 0x07FFFFFFF0000000uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000000078644FAuLL, 0x0000001102D8BD5CuLL, 0x0000000003E2A42AuLL},
+{0x7FFFFFFF00000002uLL, 0x000000000747AE14uLL, 0x000000119519529AuLL, 0x00000000052ADFFAuLL},
+{0x7FFFFFFF00000002uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000004uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000006uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x000000008000000BuLL},
+{0x7FFFFFFF00000002uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x0000000000000092uLL},
+{0x7FFFFFFF00000002uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x0000000055449110uLL},
+{0x7FFFFFFF00000002uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x0000000024619092uLL},
+{0x7FFFFFFF00000002uLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555556uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x0000000100000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFFuLL},
+{0x7FFFFFFF00000002uLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000180000000uLL},
+{0x7FFFFFFF00000002uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000140000001uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x0000000100000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000003uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000080000004uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000040000005uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x0000000100000032uLL},
+{0x7FFFFFFF00000002uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001290A84DAuLL},
+{0x7FFFFFFF00000002uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000032B07786uLL},
+{0x7FFFFFFF00000002uLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x0000000233333334uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x0000000200000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x0000000180000000uLL},
+{0x7FFFFFFF00000002uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000155555556uLL},
+{0x7FFFFFFF00000002uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAAACuLL},
+{0x7FFFFFFF00000002uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000100000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000D5555558uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000AAAAAAAEuLL},
+{0x7FFFFFFF00000002uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000080000004uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000155555572uLL},
+{0x7FFFFFFF00000002uLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002A39634D4uLL},
+{0x7FFFFFFF00000002uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000620B046uLL},
+{0x7FFFFFFF00000002uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000124924926uLL},
+{0x7FFFFFFF00000002uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000100000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x000000035FFFFFFFuLL},
+{0x7FFFFFFF00000002uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x0000000340000000uLL},
+{0x7FFFFFFF00000002uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x0000000320000001uLL},
+{0x7FFFFFFF00000002uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EF8000003uLL},
+{0x7FFFFFFF00000002uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF0000004uLL},
+{0x7FFFFFFF00000002uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EE8000005uLL},
+{0x7FFFFFFF00000002uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E80000012uLL},
+{0x7FFFFFFF00000002uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000903C212C8uLL},
+{0x7FFFFFFF00000002uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000223D54BC2uLL},
+{0x7FFFFFFF00000002uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000107C1F07EuLL},
+{0x7FFFFFFF00000002uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000100000002uLL},
+{0x7FFFFFFF00000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000816969697uLL},
+{0x7FFFFFFF00000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000080F0F0F10uLL},
+{0x7FFFFFFF00000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000807878789uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6500000002uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFF1uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFE0uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFCFuLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B64FFFFFEF2uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6480156B68uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B64843D70AEuLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C80000013uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C80000002uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5400000035uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5400000024uLL},
+{0x7FFFFFFF00000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5400000013uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFF1uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFE0uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFCFuLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFEF2uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA80156B68uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA843D70AEuLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A280000013uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A280000002uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A00000035uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A00000024uLL},
+{0x7FFFFFFF00000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A00000013uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000002uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x3FFFFFFF80000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000000000003uLL, 0x2AAAAAAA55555556uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000000000010uLL, 0x07FFFFFFF0000000uLL, 0x0000000000000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000000078644FAuLL, 0x0000001102D8BD5CuLL, 0x0000000003E2A42BuLL},
+{0x7FFFFFFF00000003uLL, 0x000000000747AE14uLL, 0x000000119519529AuLL, 0x00000000052ADFFBuLL},
+{0x7FFFFFFF00000003uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000005uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000007uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x000000008000000CuLL},
+{0x7FFFFFFF00000003uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x0000000000000093uLL},
+{0x7FFFFFFF00000003uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x0000000055449111uLL},
+{0x7FFFFFFF00000003uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x0000000024619093uLL},
+{0x7FFFFFFF00000003uLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555557uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x0000000100000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C0000000uLL},
+{0x7FFFFFFF00000003uLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000180000001uLL},
+{0x7FFFFFFF00000003uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000140000002uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x0000000100000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000004uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000080000005uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000040000006uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x0000000100000033uLL},
+{0x7FFFFFFF00000003uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001290A84DBuLL},
+{0x7FFFFFFF00000003uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000032B07787uLL},
+{0x7FFFFFFF00000003uLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x0000000233333335uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x0000000200000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x0000000180000001uLL},
+{0x7FFFFFFF00000003uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000155555557uLL},
+{0x7FFFFFFF00000003uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAAADuLL},
+{0x7FFFFFFF00000003uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000100000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000D5555559uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000AAAAAAAFuLL},
+{0x7FFFFFFF00000003uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000080000005uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000155555573uLL},
+{0x7FFFFFFF00000003uLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002A39634D5uLL},
+{0x7FFFFFFF00000003uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000620B047uLL},
+{0x7FFFFFFF00000003uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000124924927uLL},
+{0x7FFFFFFF00000003uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000100000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x0000000360000000uLL},
+{0x7FFFFFFF00000003uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x0000000340000001uLL},
+{0x7FFFFFFF00000003uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x0000000320000002uLL},
+{0x7FFFFFFF00000003uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EF8000004uLL},
+{0x7FFFFFFF00000003uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF0000005uLL},
+{0x7FFFFFFF00000003uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EE8000006uLL},
+{0x7FFFFFFF00000003uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E80000013uLL},
+{0x7FFFFFFF00000003uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000903C212C9uLL},
+{0x7FFFFFFF00000003uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000223D54BC3uLL},
+{0x7FFFFFFF00000003uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000107C1F07FuLL},
+{0x7FFFFFFF00000003uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000100000003uLL},
+{0x7FFFFFFF00000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000816969698uLL},
+{0x7FFFFFFF00000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000080F0F0F11uLL},
+{0x7FFFFFFF00000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x000000080787878AuLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6500000003uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFF2uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFE1uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFD0uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B64FFFFFEF3uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6480156B69uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B64843D70AFuLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C80000014uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C80000003uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5400000036uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5400000025uLL},
+{0x7FFFFFFF00000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5400000014uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFF2uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFE1uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFD0uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFEF3uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA80156B69uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA843D70AFuLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A280000014uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A280000003uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A00000036uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A00000025uLL},
+{0x7FFFFFFF00000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A00000014uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000003uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x3FFFFFFF80000008uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000000000003uLL, 0x2AAAAAAA5555555AuLL, 0x0000000000000002uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000000000010uLL, 0x07FFFFFFF0000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000010uLL, 0x00000000078644FAuLL, 0x0000001102D8BD5CuLL, 0x0000000003E2A438uLL},
+{0x7FFFFFFF00000010uLL, 0x000000000747AE14uLL, 0x000000119519529AuLL, 0x00000000052AE008uLL},
+{0x7FFFFFFF00000010uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000008000000FuLL},
+{0x7FFFFFFF00000010uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000012uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000014uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x0000000080000019uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x00000000000000A0uLL},
+{0x7FFFFFFF00000010uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x000000005544911EuLL},
+{0x7FFFFFFF00000010uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x00000000246190A0uLL},
+{0x7FFFFFFF00000010uLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555564uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x0000000100000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C000000DuLL},
+{0x7FFFFFFF00000010uLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000018000000EuLL},
+{0x7FFFFFFF00000010uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000014000000FuLL},
+{0x7FFFFFFF00000010uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x0000000100000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000011uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000080000012uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000040000013uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x0000000100000040uLL},
+{0x7FFFFFFF00000010uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001290A84E8uLL},
+{0x7FFFFFFF00000010uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000032B07794uLL},
+{0x7FFFFFFF00000010uLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x0000000233333342uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x0000000200000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000018000000EuLL},
+{0x7FFFFFFF00000010uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000155555564uLL},
+{0x7FFFFFFF00000010uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAABAuLL},
+{0x7FFFFFFF00000010uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000100000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000D5555566uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000AAAAAABCuLL},
+{0x7FFFFFFF00000010uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000080000012uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000155555580uLL},
+{0x7FFFFFFF00000010uLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002A39634E2uLL},
+{0x7FFFFFFF00000010uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000620B054uLL},
+{0x7FFFFFFF00000010uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000124924934uLL},
+{0x7FFFFFFF00000010uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000100000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x000000036000000DuLL},
+{0x7FFFFFFF00000010uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x000000034000000EuLL},
+{0x7FFFFFFF00000010uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x000000032000000FuLL},
+{0x7FFFFFFF00000010uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EF8000011uLL},
+{0x7FFFFFFF00000010uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF0000012uLL},
+{0x7FFFFFFF00000010uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EE8000013uLL},
+{0x7FFFFFFF00000010uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E80000020uLL},
+{0x7FFFFFFF00000010uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000903C212D6uLL},
+{0x7FFFFFFF00000010uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000223D54BD0uLL},
+{0x7FFFFFFF00000010uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000107C1F08CuLL},
+{0x7FFFFFFF00000010uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000100000010uLL},
+{0x7FFFFFFF00000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x00000008169696A5uLL},
+{0x7FFFFFFF00000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000080F0F0F1EuLL},
+{0x7FFFFFFF00000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000807878797uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6500000010uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFFFuLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFEEuLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B64FFFFFFDDuLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B64FFFFFF00uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6480156B76uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B64843D70BCuLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C80000021uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C80000010uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5400000043uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5400000032uLL},
+{0x7FFFFFFF00000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5400000021uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFFFuLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFEEuLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFFDDuLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AAFFFFFF00uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA80156B76uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA843D70BCuLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A280000021uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A280000010uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A00000043uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A00000032uLL},
+{0x7FFFFFFF00000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A00000021uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF00000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF00000010uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x3FFFFFFF83C3227DuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000000000003uLL, 0x2AAAAAAA57D76C53uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000000000010uLL, 0x07FFFFFFF078644FuLL, 0x000000000000000AuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000000078644FAuLL, 0x0000001102D8BD5DuLL, 0x0000000003E2A428uLL},
+{0x7FFFFFFF078644FAuLL, 0x000000000747AE14uLL, 0x000000119519529BuLL, 0x00000000056976DEuLL},
+{0x7FFFFFFF078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x00000000878644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000000878644F9uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x00000000078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x00000000878644FCuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x00000000078644FEuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x0000000087864503uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x000000000786458AuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x000000005CCAD608uLL},
+{0x7FFFFFFF078644FAuLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x000000002BE7D58AuLL},
+{0x7FFFFFFF078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x000000015CDB9A4EuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x00000001078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C78644F7uLL},
+{0x7FFFFFFF078644FAuLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000001878644F8uLL},
+{0x7FFFFFFF078644FAuLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000001478644F9uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x00000001078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C78644FBuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x00000000878644FCuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x00000000478644FDuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x000000010786452AuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x000000013090C9D2uLL},
+{0x7FFFFFFF078644FAuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x000000003A36BC7EuLL},
+{0x7FFFFFFF078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x000000023AB9782CuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x00000002078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x00000001878644F8uLL},
+{0x7FFFFFFF078644FAuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x000000015CDB9A4EuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000013230EFA4uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000001078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000DCDB9A50uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000B230EFA6uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x00000000878644FCuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000015CDB9A6AuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002AB1C79CCuLL},
+{0x7FFFFFFF078644FAuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000DA6F53EuLL},
+{0x7FFFFFFF078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x000000012C188E1EuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000001078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x00000003678644F7uLL},
+{0x7FFFFFFF078644FAuLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x00000003478644F8uLL},
+{0x7FFFFFFF078644FAuLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x00000003278644F9uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EFF8644FBuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF78644FCuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EEF8644FDuLL},
+{0x7FFFFFFF078644FAuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E8786450AuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x000000090B4857C0uLL},
+{0x7FFFFFFF078644FAuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x000000022B5B90BAuLL},
+{0x7FFFFFFF078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x000000010F483576uLL},
+{0x7FFFFFFF078644FAuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000001078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x000000081E1CDB8FuLL},
+{0x7FFFFFFF078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x0000000816955408uLL},
+{0x7FFFFFFF078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x000000080F0DCC81uLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B65078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65078644E9uLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65078644D8uLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65078644C7uLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65078643EAuLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B64879BB060uLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B648BC3B5A6uLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C8786450BuLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C878644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B540786452DuLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B540786451CuLL},
+{0x7FFFFFFF078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B540786450BuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AB078644E9uLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AB078644D8uLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AB078644C7uLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AB078643EAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA879BB060uLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA8BC3B5A6uLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A28786450BuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A2878644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A0786452DuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A0786451CuLL},
+{0x7FFFFFFF078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A0786450BuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF078644FAuLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x3FFFFFFF83A3D70AuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000000000003uLL, 0x2AAAAAAA57C28F5CuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000000000010uLL, 0x07FFFFFFF0747AE1uLL, 0x0000000000000004uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000000078644FAuLL, 0x0000001102D8BD5DuLL, 0x0000000003A40D42uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000000747AE14uLL, 0x000000119519529BuLL, 0x00000000052ADFF8uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000008747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x000000000747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000008747AE13uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x000000000747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL, 0x000000008747AE16uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x000000000747AE18uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000100000003uLL, 0x000000007FFFFFFDuLL, 0x000000008747AE1DuLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x000000000747AEA4uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x000000005C8C3F22uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x000000002BA93EA4uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000055555554uLL, 0x000000015C9D0368uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x000000010747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000001FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C747AE11uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000018747AE12uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000014747AE13uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x000000010747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000000C747AE15uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x000000008747AE16uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x000000004747AE17uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x000000010747AE44uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001305232ECuLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000039F82598uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000033333332uLL, 0x000000023A7AE146uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x000000020747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000018747AE12uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x000000015C9D0368uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x0000000131F258BEuLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x000000010747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000000DC9D036AuLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000000B1F258C0uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x000000008747AE16uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000015C9D0384uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000003078644FAuLL, 0x000000002A40B0A3uLL, 0x00000002AADDE2E6uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000000D685E58uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x000000012BD9F738uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x000000010747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x000000036747AE11uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x000000034747AE12uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x000000032747AE13uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000EFF47AE15uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000EF747AE16uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000EEF47AE17uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000E8747AE24uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x000000090B09C0DAuLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x000000022B1CF9D4uLL},
+{0x7FFFFFFF0747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x000000010F099E90uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x000000010747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x000000081DDE44A9uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000081656BD22uLL},
+{0x7FFFFFFF0747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x000000080ECF359BuLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B650747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B650747AE03uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B650747ADF2uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B650747ADE1uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B650747AD04uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B64875D197AuLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B648B851EC0uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5C8747AE25uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5C8747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B540747AE47uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B540747AE36uLL},
+{0x7FFFFFFF0747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B540747AE25uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AB0747AE03uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AB0747ADF2uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AB0747ADE1uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AB0747AD04uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AA875D197AuLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AA8B851EC0uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A28747AE25uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A28747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A0747AE47uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A0747AE36uLL},
+{0x7FFFFFFF0747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A0747AE25uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF0747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF0747AE14uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x3FFFFFFFBFFFFFFFuLL, 0x0000000000000001uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000003uLL, 0x2AAAAAAA7FFFFFFFuLL, 0x0000000000000002uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000010uLL, 0x07FFFFFFF7FFFFFFuLL, 0x000000000000000FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000001102D8BD6DuLL, 0x0000000003F80F8DuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000000747AE14uLL, 0x00000011951952ACuLL, 0x000000000220A28FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000000000002uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000080000003uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000000000005uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x000000008000008FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x00000000D544910DuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x00000000A461908FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555554uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000055555554uLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x000000003FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000001FFFFFFFDuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFEuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x0000000140000000uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000100000001uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000002uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x000000018000002FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001A90A84D7uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x00000000B2B07783uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x0000000033333332uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000033333332uLL, 0x000000027FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x00000001FFFFFFFDuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x00000001D5555553uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAA9uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x0000000155555555uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAAABuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000100000001uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x00000001D555556FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000001C0FEFD7uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000008620B043uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x00000001A4924923uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x00000003DFFFFFFCuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x00000003BFFFFFFDuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x000000039FFFFFFEuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000F78000000uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000F70000001uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000F68000002uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F0000000FuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000983C212C5uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x00000002A3D54BBFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000187C1F07BuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000896969694uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000088F0F0F0DuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000887878786uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B657FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B657FFFFFEEuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B657FFFFFDDuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B657FFFFFCCuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B657FFFFEEFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6500156B65uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65043D70ABuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D00000010uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5CFFFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5480000032uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5480000021uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5480000010uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFEEuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFDDuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFCCuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFEEFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB00156B65uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB043D70ABuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A300000010uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A2FFFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A80000032uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A80000021uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A80000010uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x3FFFFFFFC0000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000000000003uLL, 0x2AAAAAAA80000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000000000010uLL, 0x07FFFFFFF8000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000000078644FAuLL, 0x0000001102D8BD6DuLL, 0x0000000003F80F8EuLL},
+{0x7FFFFFFF80000000uLL, 0x000000000747AE14uLL, 0x00000011951952ACuLL, 0x000000000220A290uLL},
+{0x7FFFFFFF80000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000000000003uLL},
+{0x7FFFFFFF80000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000080000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000080000004uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000000000006uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000100000010uLL, 0x000000007FFFFFF7uLL, 0x0000000080000090uLL},
+{0x7FFFFFFF80000000uLL, 0x00000001078644FAuLL, 0x000000007C585DADuLL, 0x00000000D544910EuLL},
+{0x7FFFFFFF80000000uLL, 0x000000010747AE14uLL, 0x000000007C75ED2CuLL, 0x00000000A4619090uLL},
+{0x7FFFFFFF80000000uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555555uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x0000000040000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000001FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFFuLL},
+{0x7FFFFFFF80000000uLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x0000000180000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x0000000140000001uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000100000002uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x00000000C0000003uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000200000010uLL, 0x000000003FFFFFFDuLL, 0x0000000180000030uLL},
+{0x7FFFFFFF80000000uLL, 0x00000002078644FAuLL, 0x000000003F12B424uLL, 0x00000001A90A84D8uLL},
+{0x7FFFFFFF80000000uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x00000000B2B07784uLL},
+{0x7FFFFFFF80000000uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x0000000033333333uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x00000001FFFFFFFEuLL},
+{0x7FFFFFFF80000000uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x00000001D5555554uLL},
+{0x7FFFFFFF80000000uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAAAuLL},
+{0x7FFFFFFF80000000uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000180000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x0000000155555556uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x000000012AAAAAACuLL},
+{0x7FFFFFFF80000000uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000100000002uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x00000001D5555570uLL},
+{0x7FFFFFFF80000000uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000001C0FEFD8uLL},
+{0x7FFFFFFF80000000uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000008620B044uLL},
+{0x7FFFFFFF80000000uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x00000001A4924924uLL},
+{0x7FFFFFFF80000000uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000180000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000003FFFFFFFDuLL, 0x000000001FFFFFFFuLL, 0x00000003DFFFFFFDuLL},
+{0x7FFFFFFF80000000uLL, 0x00000003FFFFFFFEuLL, 0x000000001FFFFFFFuLL, 0x00000003BFFFFFFEuLL},
+{0x7FFFFFFF80000000uLL, 0x00000003FFFFFFFFuLL, 0x000000001FFFFFFFuLL, 0x000000039FFFFFFFuLL},
+{0x7FFFFFFF80000000uLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000F80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000F78000001uLL},
+{0x7FFFFFFF80000000uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000F70000002uLL},
+{0x7FFFFFFF80000000uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000F68000003uLL},
+{0x7FFFFFFF80000000uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F00000010uLL},
+{0x7FFFFFFF80000000uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000983C212C6uLL},
+{0x7FFFFFFF80000000uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x00000002A3D54BC0uLL},
+{0x7FFFFFFF80000000uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000187C1F07CuLL},
+{0x7FFFFFFF80000000uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000180000000uLL},
+{0x7FFFFFFF80000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000896969695uLL},
+{0x7FFFFFFF80000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000088F0F0F0EuLL},
+{0x7FFFFFFF80000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000887878787uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6580000000uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B657FFFFFEFuLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B657FFFFFDEuLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B657FFFFFCDuLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B657FFFFEF0uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6500156B66uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65043D70ACuLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D00000011uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D00000000uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5480000033uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5480000022uLL},
+{0x7FFFFFFF80000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5480000011uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AB80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFEFuLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFDEuLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFFCDuLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AB7FFFFEF0uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB00156B66uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB043D70ACuLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A300000011uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A300000000uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709A80000033uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709A80000022uLL},
+{0x7FFFFFFF80000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709A80000011uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFF80000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFF80000000uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000002uLL, 0x3FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAA9uLL, 0x0000000000000002uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000010uLL, 0x07FFFFFFFFFFFFFFuLL, 0x000000000000000DuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF1uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E1339uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000000uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000100000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000001uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000003uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x000000000000007DuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C11uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E279uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555552uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000003FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x00000001FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000000uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000000000001DuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FDBuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07781uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333330uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFBuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555551uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAA7uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000001FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555553uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAA9uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x000000017FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000025555556DuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFD5uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B041uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924921uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000001FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000005FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000003FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000001FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000FFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF7FFFFFEuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FEFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000000uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F8000000DuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C3uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BBDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F079uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000001FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969692uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F0BuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878784uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFECuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFDBuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFCAuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEEDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B63uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70A9uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D8000000EuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D7FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000030uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B550000001FuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B550000000EuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFECuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFDBuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFCAuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEEDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B63uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70A9uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A38000000EuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A37FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000030uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B0000001FuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B0000000EuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000002uLL, 0x3FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAAAuLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000010uLL, 0x07FFFFFFFFFFFFFFuLL, 0x000000000000000EuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF2uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E133AuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000001uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000004uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x000000000000007EuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C12uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E27AuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555553uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000003FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x00000001FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000001uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000000000001EuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FDCuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07782uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333331uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFCuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555552uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAA8uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000001FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555554uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAAAuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000025555556EuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFD6uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B042uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924922uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000001FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000005FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000003FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000001FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000FFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF7FFFFFFuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000001uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F8000000EuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C4uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BBEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F07AuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000001FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969693uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F0CuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878785uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFEDuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFDCuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFCBuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEEEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B64uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70AAuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D8000000FuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D7FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000031uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000020uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B550000000FuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFEDuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFDCuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFCBuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEEEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B64uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70AAuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A38000000FuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A37FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000031uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000020uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B0000000FuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000002uLL, 0x3FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAAAuLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000010uLL, 0x07FFFFFFFFFFFFFFuLL, 0x000000000000000FuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF3uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E133BuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000002uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000005uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x000000000000007FuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C13uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E27BuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555554uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000003FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000200000000uLL, 0x000000003FFFFFFFuLL, 0x00000001FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000000uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000002uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000000000001FuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FDDuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07783uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333332uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555553uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAA9uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000001FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555555uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAABuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000025555556FuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFD7uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B043uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924923uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000001FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000005FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000003FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000001FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000007FFFFFFuLL, 0x0000000FFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF8000000uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000002uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F8000000FuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C5uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BBFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F07BuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000001FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969694uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F0DuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878786uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFEEuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFDDuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFCCuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEEFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B65uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70ABuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D80000010uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D7FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000032uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000021uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5500000010uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFEEuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFDDuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFCCuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEEFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B65uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70ABuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A380000010uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A37FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000032uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000021uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B00000010uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x7FFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0x8000000000000000uLL, 0x0000000000000001uLL, 0x8000000000000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x0000000000000002uLL, 0x4000000000000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAAAuLL, 0x0000000000000002uLL},
+{0x8000000000000000uLL, 0x0000000000000010uLL, 0x0800000000000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF4uLL},
+{0x8000000000000000uLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E133CuLL},
+{0x8000000000000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000002uLL},
+{0x8000000000000000uLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000003uLL},
+{0x8000000000000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000002uLL},
+{0x8000000000000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000080000000uLL},
+{0x8000000000000000uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0x8000000000000000uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0x8000000000000000uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000006uLL},
+{0x8000000000000000uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x0000000000000080uLL},
+{0x8000000000000000uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C14uLL},
+{0x8000000000000000uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E27CuLL},
+{0x8000000000000000uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555555uLL},
+{0x8000000000000000uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000080000000uLL},
+{0x8000000000000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C0000000uLL},
+{0x8000000000000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000080000000uLL},
+{0x8000000000000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x0000000040000000uLL},
+{0x8000000000000000uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000001uLL},
+{0x8000000000000000uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000002uLL},
+{0x8000000000000000uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000003uLL},
+{0x8000000000000000uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x0000000000000020uLL},
+{0x8000000000000000uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FDEuLL},
+{0x8000000000000000uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07784uLL},
+{0x8000000000000000uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333333uLL},
+{0x8000000000000000uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000080000000uLL},
+{0x8000000000000000uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFEuLL},
+{0x8000000000000000uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555554uLL},
+{0x8000000000000000uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAAAuLL},
+{0x8000000000000000uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000200000000uLL},
+{0x8000000000000000uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555556uLL},
+{0x8000000000000000uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAACuLL},
+{0x8000000000000000uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000002uLL},
+{0x8000000000000000uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000255555570uLL},
+{0x8000000000000000uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFD8uLL},
+{0x8000000000000000uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B044uLL},
+{0x8000000000000000uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924924uLL},
+{0x8000000000000000uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000200000000uLL},
+{0x8000000000000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x0000000060000000uLL},
+{0x8000000000000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x0000000040000000uLL},
+{0x8000000000000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x0000000020000000uLL},
+{0x8000000000000000uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF8000001uLL},
+{0x8000000000000000uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000002uLL},
+{0x8000000000000000uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000003uLL},
+{0x8000000000000000uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F80000010uLL},
+{0x8000000000000000uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C6uLL},
+{0x8000000000000000uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BC0uLL},
+{0x8000000000000000uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F07CuLL},
+{0x8000000000000000uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000200000000uLL},
+{0x8000000000000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969695uLL},
+{0x8000000000000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F0EuLL},
+{0x8000000000000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878787uLL},
+{0x8000000000000000uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6600000000uLL},
+{0x8000000000000000uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFEFuLL},
+{0x8000000000000000uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFDEuLL},
+{0x8000000000000000uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFCDuLL},
+{0x8000000000000000uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEF0uLL},
+{0x8000000000000000uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B66uLL},
+{0x8000000000000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70ACuLL},
+{0x8000000000000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D80000011uLL},
+{0x8000000000000000uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D80000000uLL},
+{0x8000000000000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000033uLL},
+{0x8000000000000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000022uLL},
+{0x8000000000000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5500000011uLL},
+{0x8000000000000000uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC00000000uLL},
+{0x8000000000000000uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFEFuLL},
+{0x8000000000000000uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFDEuLL},
+{0x8000000000000000uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFCDuLL},
+{0x8000000000000000uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEF0uLL},
+{0x8000000000000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B66uLL},
+{0x8000000000000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70ACuLL},
+{0x8000000000000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A380000011uLL},
+{0x8000000000000000uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A380000000uLL},
+{0x8000000000000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000033uLL},
+{0x8000000000000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000022uLL},
+{0x8000000000000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B00000011uLL},
+{0x8000000000000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x8000000000000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x8000000000000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x8000000000000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x8000000000000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF0uLL},
+{0x8000000000000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB06uLL},
+{0x8000000000000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851ECuLL},
+{0x8000000000000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x8000000000000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x8000000000000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x8000000000000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x8000000000000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x8000000000000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000000uLL, 0x8000000000000001uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000000uLL},
+{0x8000000000000001uLL, 0x0000000000000001uLL, 0x8000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000001uLL, 0x0000000000000002uLL, 0x4000000000000000uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAABuLL, 0x0000000000000000uLL},
+{0x8000000000000001uLL, 0x0000000000000010uLL, 0x0800000000000000uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF5uLL},
+{0x8000000000000001uLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E133DuLL},
+{0x8000000000000001uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000003uLL},
+{0x8000000000000001uLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000004uLL},
+{0x8000000000000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000003uLL},
+{0x8000000000000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000080000001uLL},
+{0x8000000000000001uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0x8000000000000001uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL},
+{0x8000000000000001uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000007uLL},
+{0x8000000000000001uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x0000000000000081uLL},
+{0x8000000000000001uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C15uLL},
+{0x8000000000000001uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E27DuLL},
+{0x8000000000000001uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555556uLL},
+{0x8000000000000001uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000080000001uLL},
+{0x8000000000000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C0000001uLL},
+{0x8000000000000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000080000001uLL},
+{0x8000000000000001uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x0000000040000001uLL},
+{0x8000000000000001uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000002uLL},
+{0x8000000000000001uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000003uLL},
+{0x8000000000000001uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000004uLL},
+{0x8000000000000001uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x0000000000000021uLL},
+{0x8000000000000001uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FDFuLL},
+{0x8000000000000001uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07785uLL},
+{0x8000000000000001uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333334uLL},
+{0x8000000000000001uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000080000001uLL},
+{0x8000000000000001uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFFuLL},
+{0x8000000000000001uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555555uLL},
+{0x8000000000000001uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAABuLL},
+{0x8000000000000001uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000200000001uLL},
+{0x8000000000000001uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555557uLL},
+{0x8000000000000001uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAADuLL},
+{0x8000000000000001uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000003uLL},
+{0x8000000000000001uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000255555571uLL},
+{0x8000000000000001uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFD9uLL},
+{0x8000000000000001uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B045uLL},
+{0x8000000000000001uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924925uLL},
+{0x8000000000000001uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000200000001uLL},
+{0x8000000000000001uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x0000000060000001uLL},
+{0x8000000000000001uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x0000000040000001uLL},
+{0x8000000000000001uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x0000000020000001uLL},
+{0x8000000000000001uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF8000002uLL},
+{0x8000000000000001uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000003uLL},
+{0x8000000000000001uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000004uLL},
+{0x8000000000000001uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F80000011uLL},
+{0x8000000000000001uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C7uLL},
+{0x8000000000000001uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BC1uLL},
+{0x8000000000000001uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F07DuLL},
+{0x8000000000000001uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000200000001uLL},
+{0x8000000000000001uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969696uLL},
+{0x8000000000000001uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F0FuLL},
+{0x8000000000000001uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878788uLL},
+{0x8000000000000001uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6600000001uLL},
+{0x8000000000000001uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFF0uLL},
+{0x8000000000000001uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFDFuLL},
+{0x8000000000000001uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFCEuLL},
+{0x8000000000000001uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEF1uLL},
+{0x8000000000000001uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B67uLL},
+{0x8000000000000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70ADuLL},
+{0x8000000000000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D80000012uLL},
+{0x8000000000000001uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D80000001uLL},
+{0x8000000000000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000034uLL},
+{0x8000000000000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000023uLL},
+{0x8000000000000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5500000012uLL},
+{0x8000000000000001uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC00000001uLL},
+{0x8000000000000001uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFF0uLL},
+{0x8000000000000001uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFDFuLL},
+{0x8000000000000001uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFCEuLL},
+{0x8000000000000001uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEF1uLL},
+{0x8000000000000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B67uLL},
+{0x8000000000000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70ADuLL},
+{0x8000000000000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A380000012uLL},
+{0x8000000000000001uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A380000001uLL},
+{0x8000000000000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000034uLL},
+{0x8000000000000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000023uLL},
+{0x8000000000000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B00000012uLL},
+{0x8000000000000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x8000000000000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x8000000000000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x8000000000000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x8000000000000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF1uLL},
+{0x8000000000000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB07uLL},
+{0x8000000000000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EDuLL},
+{0x8000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x8000000000000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x8000000000000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x8000000000000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x8000000000000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x8000000000000001uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x8000000000000001uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000001uLL},
+{0x8000000000000002uLL, 0x0000000000000001uLL, 0x8000000000000002uLL, 0x0000000000000000uLL},
+{0x8000000000000002uLL, 0x0000000000000002uLL, 0x4000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000002uLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAABuLL, 0x0000000000000001uLL},
+{0x8000000000000002uLL, 0x0000000000000010uLL, 0x0800000000000000uLL, 0x0000000000000002uLL},
+{0x8000000000000002uLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF6uLL},
+{0x8000000000000002uLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E133EuLL},
+{0x8000000000000002uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000004uLL},
+{0x8000000000000002uLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0x8000000000000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000005uLL},
+{0x8000000000000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000004uLL},
+{0x8000000000000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000080000002uLL},
+{0x8000000000000002uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000000000002uLL},
+{0x8000000000000002uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000003uLL},
+{0x8000000000000002uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL},
+{0x8000000000000002uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000008uLL},
+{0x8000000000000002uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x0000000000000082uLL},
+{0x8000000000000002uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C16uLL},
+{0x8000000000000002uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E27EuLL},
+{0x8000000000000002uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555557uLL},
+{0x8000000000000002uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000080000002uLL},
+{0x8000000000000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C0000002uLL},
+{0x8000000000000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000080000002uLL},
+{0x8000000000000002uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x0000000040000002uLL},
+{0x8000000000000002uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x0000000000000002uLL},
+{0x8000000000000002uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000003uLL},
+{0x8000000000000002uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000004uLL},
+{0x8000000000000002uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000005uLL},
+{0x8000000000000002uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x0000000000000022uLL},
+{0x8000000000000002uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FE0uLL},
+{0x8000000000000002uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07786uLL},
+{0x8000000000000002uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333335uLL},
+{0x8000000000000002uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000080000002uLL},
+{0x8000000000000002uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x0000000280000000uLL},
+{0x8000000000000002uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555556uLL},
+{0x8000000000000002uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAACuLL},
+{0x8000000000000002uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000200000002uLL},
+{0x8000000000000002uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555558uLL},
+{0x8000000000000002uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAAEuLL},
+{0x8000000000000002uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000004uLL},
+{0x8000000000000002uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000255555572uLL},
+{0x8000000000000002uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFDAuLL},
+{0x8000000000000002uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B046uLL},
+{0x8000000000000002uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924926uLL},
+{0x8000000000000002uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000200000002uLL},
+{0x8000000000000002uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x0000000060000002uLL},
+{0x8000000000000002uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x0000000040000002uLL},
+{0x8000000000000002uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x0000000020000002uLL},
+{0x8000000000000002uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x0000000000000002uLL},
+{0x8000000000000002uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF8000003uLL},
+{0x8000000000000002uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000004uLL},
+{0x8000000000000002uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000005uLL},
+{0x8000000000000002uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F80000012uLL},
+{0x8000000000000002uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C8uLL},
+{0x8000000000000002uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BC2uLL},
+{0x8000000000000002uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F07EuLL},
+{0x8000000000000002uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000200000002uLL},
+{0x8000000000000002uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969697uLL},
+{0x8000000000000002uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F10uLL},
+{0x8000000000000002uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878789uLL},
+{0x8000000000000002uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6600000002uLL},
+{0x8000000000000002uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFF1uLL},
+{0x8000000000000002uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFE0uLL},
+{0x8000000000000002uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFCFuLL},
+{0x8000000000000002uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEF2uLL},
+{0x8000000000000002uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B68uLL},
+{0x8000000000000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70AEuLL},
+{0x8000000000000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D80000013uLL},
+{0x8000000000000002uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D80000002uLL},
+{0x8000000000000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000035uLL},
+{0x8000000000000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000024uLL},
+{0x8000000000000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5500000013uLL},
+{0x8000000000000002uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC00000002uLL},
+{0x8000000000000002uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFF1uLL},
+{0x8000000000000002uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFE0uLL},
+{0x8000000000000002uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFCFuLL},
+{0x8000000000000002uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEF2uLL},
+{0x8000000000000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B68uLL},
+{0x8000000000000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70AEuLL},
+{0x8000000000000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A380000013uLL},
+{0x8000000000000002uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A380000002uLL},
+{0x8000000000000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000035uLL},
+{0x8000000000000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000024uLL},
+{0x8000000000000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B00000013uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x8000000000000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF2uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB08uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EEuLL},
+{0x8000000000000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x8000000000000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x8000000000000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x8000000000000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x8000000000000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x8000000000000002uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x8000000000000002uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x8000000000000002uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000002uLL, 0x8000000000000003uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000002uLL},
+{0x8000000000000003uLL, 0x0000000000000001uLL, 0x8000000000000003uLL, 0x0000000000000000uLL},
+{0x8000000000000003uLL, 0x0000000000000002uLL, 0x4000000000000001uLL, 0x0000000000000001uLL},
+{0x8000000000000003uLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAABuLL, 0x0000000000000002uLL},
+{0x8000000000000003uLL, 0x0000000000000010uLL, 0x0800000000000000uLL, 0x0000000000000003uLL},
+{0x8000000000000003uLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7AF7uLL},
+{0x8000000000000003uLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E133FuLL},
+{0x8000000000000003uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000005uLL},
+{0x8000000000000003uLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0x8000000000000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000006uLL},
+{0x8000000000000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000005uLL},
+{0x8000000000000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000080000003uLL},
+{0x8000000000000003uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000000000003uLL},
+{0x8000000000000003uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000004uLL},
+{0x8000000000000003uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000005uLL},
+{0x8000000000000003uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000009uLL},
+{0x8000000000000003uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x0000000000000083uLL},
+{0x8000000000000003uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C17uLL},
+{0x8000000000000003uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E27FuLL},
+{0x8000000000000003uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555558uLL},
+{0x8000000000000003uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000080000003uLL},
+{0x8000000000000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C0000003uLL},
+{0x8000000000000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000080000003uLL},
+{0x8000000000000003uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x0000000040000003uLL},
+{0x8000000000000003uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x0000000000000003uLL},
+{0x8000000000000003uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000004uLL},
+{0x8000000000000003uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000005uLL},
+{0x8000000000000003uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000006uLL},
+{0x8000000000000003uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x0000000000000023uLL},
+{0x8000000000000003uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FE1uLL},
+{0x8000000000000003uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07787uLL},
+{0x8000000000000003uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333336uLL},
+{0x8000000000000003uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000080000003uLL},
+{0x8000000000000003uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x0000000280000001uLL},
+{0x8000000000000003uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555557uLL},
+{0x8000000000000003uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAADuLL},
+{0x8000000000000003uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000200000003uLL},
+{0x8000000000000003uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555559uLL},
+{0x8000000000000003uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAAAFuLL},
+{0x8000000000000003uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000005uLL},
+{0x8000000000000003uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000255555573uLL},
+{0x8000000000000003uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFDBuLL},
+{0x8000000000000003uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B047uLL},
+{0x8000000000000003uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924927uLL},
+{0x8000000000000003uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000200000003uLL},
+{0x8000000000000003uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x0000000060000003uLL},
+{0x8000000000000003uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x0000000040000003uLL},
+{0x8000000000000003uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x0000000020000003uLL},
+{0x8000000000000003uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x0000000000000003uLL},
+{0x8000000000000003uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF8000004uLL},
+{0x8000000000000003uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000005uLL},
+{0x8000000000000003uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000006uLL},
+{0x8000000000000003uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F80000013uLL},
+{0x8000000000000003uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212C9uLL},
+{0x8000000000000003uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BC3uLL},
+{0x8000000000000003uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F07FuLL},
+{0x8000000000000003uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000200000003uLL},
+{0x8000000000000003uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000916969698uLL},
+{0x8000000000000003uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F11uLL},
+{0x8000000000000003uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x000000090787878AuLL},
+{0x8000000000000003uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6600000003uLL},
+{0x8000000000000003uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFF2uLL},
+{0x8000000000000003uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFE1uLL},
+{0x8000000000000003uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFD0uLL},
+{0x8000000000000003uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFEF3uLL},
+{0x8000000000000003uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B69uLL},
+{0x8000000000000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70AFuLL},
+{0x8000000000000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D80000014uLL},
+{0x8000000000000003uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D80000003uLL},
+{0x8000000000000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000036uLL},
+{0x8000000000000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000025uLL},
+{0x8000000000000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5500000014uLL},
+{0x8000000000000003uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC00000003uLL},
+{0x8000000000000003uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFF2uLL},
+{0x8000000000000003uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFE1uLL},
+{0x8000000000000003uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFD0uLL},
+{0x8000000000000003uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFEF3uLL},
+{0x8000000000000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B69uLL},
+{0x8000000000000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70AFuLL},
+{0x8000000000000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A380000014uLL},
+{0x8000000000000003uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A380000003uLL},
+{0x8000000000000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000036uLL},
+{0x8000000000000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000025uLL},
+{0x8000000000000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B00000014uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF3uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB09uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EFuLL},
+{0x8000000000000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000004uLL},
+{0x8000000000000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x8000000000000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000006uLL},
+{0x8000000000000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0x8000000000000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0x8000000000000003uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0x8000000000000003uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x8000000000000003uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x8000000000000003uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000003uLL, 0x8000000000000010uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000003uLL},
+{0x8000000000000010uLL, 0x0000000000000001uLL, 0x8000000000000010uLL, 0x0000000000000000uLL},
+{0x8000000000000010uLL, 0x0000000000000002uLL, 0x4000000000000008uLL, 0x0000000000000000uLL},
+{0x8000000000000010uLL, 0x0000000000000003uLL, 0x2AAAAAAAAAAAAAB0uLL, 0x0000000000000000uLL},
+{0x8000000000000010uLL, 0x0000000000000010uLL, 0x0800000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000010uLL, 0x00000000078644FAuLL, 0x0000001102D8BD7EuLL, 0x00000000040D7B04uLL},
+{0x8000000000000010uLL, 0x000000000747AE14uLL, 0x00000011951952BDuLL, 0x00000000065E134CuLL},
+{0x8000000000000010uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x0000000000000012uLL},
+{0x8000000000000010uLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0x8000000000000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x0000000080000013uLL},
+{0x8000000000000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000000000012uLL},
+{0x8000000000000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000080000010uLL},
+{0x8000000000000010uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000000000010uLL},
+{0x8000000000000010uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000011uLL},
+{0x8000000000000010uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000012uLL},
+{0x8000000000000010uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000016uLL},
+{0x8000000000000010uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x0000000000000090uLL},
+{0x8000000000000010uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000004DBE4C24uLL},
+{0x8000000000000010uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000001D19E28CuLL},
+{0x8000000000000010uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555565uLL},
+{0x8000000000000010uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000080000010uLL},
+{0x8000000000000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C0000010uLL},
+{0x8000000000000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000080000010uLL},
+{0x8000000000000010uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x0000000040000010uLL},
+{0x8000000000000010uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x0000000000000010uLL},
+{0x8000000000000010uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000011uLL},
+{0x8000000000000010uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000180000012uLL},
+{0x8000000000000010uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x0000000140000013uLL},
+{0x8000000000000010uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x0000000000000030uLL},
+{0x8000000000000010uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000021843FEEuLL},
+{0x8000000000000010uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000132B07794uLL},
+{0x8000000000000010uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000B3333343uLL},
+{0x8000000000000010uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000080000010uLL},
+{0x8000000000000010uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000028000000EuLL},
+{0x8000000000000010uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x0000000255555564uLL},
+{0x8000000000000010uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAABAuLL},
+{0x8000000000000010uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000200000010uLL},
+{0x8000000000000010uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001D5555566uLL},
+{0x8000000000000010uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001AAAAAABCuLL},
+{0x8000000000000010uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000180000012uLL},
+{0x8000000000000010uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x0000000255555580uLL},
+{0x8000000000000010uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000009C0FEFE8uLL},
+{0x8000000000000010uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010620B054uLL},
+{0x8000000000000010uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000224924934uLL},
+{0x8000000000000010uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000200000010uLL},
+{0x8000000000000010uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x0000000060000010uLL},
+{0x8000000000000010uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x0000000040000010uLL},
+{0x8000000000000010uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x0000000020000010uLL},
+{0x8000000000000010uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x0000000000000010uLL},
+{0x8000000000000010uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FF8000011uLL},
+{0x8000000000000010uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF0000012uLL},
+{0x8000000000000010uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FE8000013uLL},
+{0x8000000000000010uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F80000020uLL},
+{0x8000000000000010uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A03C212D6uLL},
+{0x8000000000000010uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000323D54BD0uLL},
+{0x8000000000000010uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000207C1F08CuLL},
+{0x8000000000000010uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000200000010uLL},
+{0x8000000000000010uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x00000009169696A5uLL},
+{0x8000000000000010uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000090F0F0F1EuLL},
+{0x8000000000000010uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000907878797uLL},
+{0x8000000000000010uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6600000010uLL},
+{0x8000000000000010uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFFFuLL},
+{0x8000000000000010uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFEEuLL},
+{0x8000000000000010uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B65FFFFFFDDuLL},
+{0x8000000000000010uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B65FFFFFF00uLL},
+{0x8000000000000010uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6580156B76uLL},
+{0x8000000000000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B65843D70BCuLL},
+{0x8000000000000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D80000021uLL},
+{0x8000000000000010uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D80000010uLL},
+{0x8000000000000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5500000043uLL},
+{0x8000000000000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5500000032uLL},
+{0x8000000000000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5500000021uLL},
+{0x8000000000000010uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC00000010uLL},
+{0x8000000000000010uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFFFuLL},
+{0x8000000000000010uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFEEuLL},
+{0x8000000000000010uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFFDDuLL},
+{0x8000000000000010uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ABFFFFFF00uLL},
+{0x8000000000000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB80156B76uLL},
+{0x8000000000000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB843D70BCuLL},
+{0x8000000000000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A380000021uLL},
+{0x8000000000000010uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A380000010uLL},
+{0x8000000000000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B00000043uLL},
+{0x8000000000000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B00000032uLL},
+{0x8000000000000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B00000021uLL},
+{0x8000000000000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000100000010uLL},
+{0x8000000000000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000010000000FuLL},
+{0x8000000000000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000010000000EuLL},
+{0x8000000000000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000010000000DuLL},
+{0x8000000000000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x8000000000000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB16uLL},
+{0x8000000000000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851FCuLL},
+{0x8000000000000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000011uLL},
+{0x8000000000000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000080000010uLL},
+{0x8000000000000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000013uLL},
+{0x8000000000000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000012uLL},
+{0x8000000000000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000011uLL},
+{0x8000000000000010uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0x8000000000000010uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0x8000000000000010uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0x8000000000000010uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0x8000000000000010uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000000000010uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x8000000000000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000000000010uLL},
+{0x80000000078644FAuLL, 0x0000000000000001uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL},
+{0x80000000078644FAuLL, 0x0000000000000002uLL, 0x4000000003C3227DuLL, 0x0000000000000000uLL},
+{0x80000000078644FAuLL, 0x0000000000000003uLL, 0x2AAAAAAAAD2CC1A8uLL, 0x0000000000000002uLL},
+{0x80000000078644FAuLL, 0x0000000000000010uLL, 0x080000000078644FuLL, 0x000000000000000AuLL},
+{0x80000000078644FAuLL, 0x00000000078644FAuLL, 0x0000001102D8BD7FuLL, 0x00000000040D7AF4uLL},
+{0x80000000078644FAuLL, 0x000000000747AE14uLL, 0x00000011951952BEuLL, 0x00000000069CAA22uLL},
+{0x80000000078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x00000000078644FCuLL},
+{0x80000000078644FAuLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x00000000078644FAuLL},
+{0x80000000078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x00000000878644FDuLL},
+{0x80000000078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x00000000078644FCuLL},
+{0x80000000078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x00000000878644FAuLL},
+{0x80000000078644FAuLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x00000000078644FAuLL},
+{0x80000000078644FAuLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x00000000878644FBuLL},
+{0x80000000078644FAuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x00000000078644FCuLL},
+{0x80000000078644FAuLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x0000000087864500uLL},
+{0x80000000078644FAuLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x000000000786457AuLL},
+{0x80000000078644FAuLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000005544910EuLL},
+{0x80000000078644FAuLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x0000000024A02776uLL},
+{0x80000000078644FAuLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000DCDB9A4FuLL},
+{0x80000000078644FAuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x00000000878644FAuLL},
+{0x80000000078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C78644FAuLL},
+{0x80000000078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x00000000878644FAuLL},
+{0x80000000078644FAuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x00000000478644FAuLL},
+{0x80000000078644FAuLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x00000000078644FAuLL},
+{0x80000000078644FAuLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C78644FBuLL},
+{0x80000000078644FAuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x00000001878644FCuLL},
+{0x80000000078644FAuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x00000001478644FDuLL},
+{0x80000000078644FAuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000000786451AuLL},
+{0x80000000078644FAuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x00000000290A84D8uLL},
+{0x80000000078644FAuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x000000013A36BC7EuLL},
+{0x80000000078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000BAB9782DuLL},
+{0x80000000078644FAuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x00000000878644FAuLL},
+{0x80000000078644FAuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x00000002878644F8uLL},
+{0x80000000078644FAuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x000000025CDB9A4EuLL},
+{0x80000000078644FAuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x000000023230EFA4uLL},
+{0x80000000078644FAuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000002078644FAuLL},
+{0x80000000078644FAuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001DCDB9A50uLL},
+{0x80000000078644FAuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001B230EFA6uLL},
+{0x80000000078644FAuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x00000001878644FCuLL},
+{0x80000000078644FAuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000025CDB9A6AuLL},
+{0x80000000078644FAuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x00000000A39634D2uLL},
+{0x80000000078644FAuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010DA6F53EuLL},
+{0x80000000078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x000000022C188E1EuLL},
+{0x80000000078644FAuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000002078644FAuLL},
+{0x80000000078644FAuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x00000000678644FAuLL},
+{0x80000000078644FAuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x00000000478644FAuLL},
+{0x80000000078644FAuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x00000000278644FAuLL},
+{0x80000000078644FAuLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x00000000078644FAuLL},
+{0x80000000078644FAuLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FFF8644FBuLL},
+{0x80000000078644FAuLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF78644FCuLL},
+{0x80000000078644FAuLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FEF8644FDuLL},
+{0x80000000078644FAuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F8786450AuLL},
+{0x80000000078644FAuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A0B4857C0uLL},
+{0x80000000078644FAuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x000000032B5B90BAuLL},
+{0x80000000078644FAuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x000000020F483576uLL},
+{0x80000000078644FAuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000002078644FAuLL},
+{0x80000000078644FAuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x000000091E1CDB8FuLL},
+{0x80000000078644FAuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x0000000916955408uLL},
+{0x80000000078644FAuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x000000090F0DCC81uLL},
+{0x80000000078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B66078644FAuLL},
+{0x80000000078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B66078644E9uLL},
+{0x80000000078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B66078644D8uLL},
+{0x80000000078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B66078644C7uLL},
+{0x80000000078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B66078643EAuLL},
+{0x80000000078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B65879BB060uLL},
+{0x80000000078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B658BC3B5A6uLL},
+{0x80000000078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D8786450BuLL},
+{0x80000000078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D878644FAuLL},
+{0x80000000078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B550786452DuLL},
+{0x80000000078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B550786451CuLL},
+{0x80000000078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B550786450BuLL},
+{0x80000000078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC078644FAuLL},
+{0x80000000078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AC078644E9uLL},
+{0x80000000078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AC078644D8uLL},
+{0x80000000078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AC078644C7uLL},
+{0x80000000078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AC078643EAuLL},
+{0x80000000078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB879BB060uLL},
+{0x80000000078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB8BC3B5A6uLL},
+{0x80000000078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A38786450BuLL},
+{0x80000000078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A3878644FAuLL},
+{0x80000000078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B0786452DuLL},
+{0x80000000078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B0786451CuLL},
+{0x80000000078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B0786450BuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000001078644FAuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000001078644F9uLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000001078644F8uLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000001078644F7uLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000001078644EAuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000001003E96E6uLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x00000000878644FBuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x00000000878644FAuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000078644FDuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000078644FCuLL},
+{0x80000000078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000078644FBuLL},
+{0x80000000078644FAuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0x80000000078644FAuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0x80000000078644FAuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0x80000000078644FAuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0x80000000078644FAuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0x80000000078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x80000000078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0x80000000078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x80000000078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000078644FAuLL},
+{0x800000000747AE14uLL, 0x0000000000000001uLL, 0x800000000747AE14uLL, 0x0000000000000000uLL},
+{0x800000000747AE14uLL, 0x0000000000000002uLL, 0x4000000003A3D70AuLL, 0x0000000000000000uLL},
+{0x800000000747AE14uLL, 0x0000000000000003uLL, 0x2AAAAAAAAD17E4B1uLL, 0x0000000000000001uLL},
+{0x800000000747AE14uLL, 0x0000000000000010uLL, 0x0800000000747AE1uLL, 0x0000000000000004uLL},
+{0x800000000747AE14uLL, 0x00000000078644FAuLL, 0x0000001102D8BD7FuLL, 0x0000000003CEE40EuLL},
+{0x800000000747AE14uLL, 0x000000000747AE14uLL, 0x00000011951952BEuLL, 0x00000000065E133CuLL},
+{0x800000000747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL, 0x000000000747AE16uLL},
+{0x800000000747AE14uLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x000000000747AE14uLL},
+{0x800000000747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000001uLL, 0x000000008747AE17uLL},
+{0x800000000747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x000000000747AE16uLL},
+{0x800000000747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000008747AE14uLL},
+{0x800000000747AE14uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x000000000747AE14uLL},
+{0x800000000747AE14uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x000000008747AE15uLL},
+{0x800000000747AE14uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x000000000747AE16uLL},
+{0x800000000747AE14uLL, 0x0000000100000003uLL, 0x000000007FFFFFFEuLL, 0x000000008747AE1AuLL},
+{0x800000000747AE14uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x000000000747AE94uLL},
+{0x800000000747AE14uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x000000005505FA28uLL},
+{0x800000000747AE14uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x0000000024619090uLL},
+{0x800000000747AE14uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x00000000DC9D0369uLL},
+{0x800000000747AE14uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000008747AE14uLL},
+{0x800000000747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000C747AE14uLL},
+{0x800000000747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000008747AE14uLL},
+{0x800000000747AE14uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000004747AE14uLL},
+{0x800000000747AE14uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x000000000747AE14uLL},
+{0x800000000747AE14uLL, 0x0000000200000001uLL, 0x000000003FFFFFFFuLL, 0x00000001C747AE15uLL},
+{0x800000000747AE14uLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x000000018747AE16uLL},
+{0x800000000747AE14uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x000000014747AE17uLL},
+{0x800000000747AE14uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000000747AE34uLL},
+{0x800000000747AE14uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000028CBEDF2uLL},
+{0x800000000747AE14uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x0000000139F82598uLL},
+{0x800000000747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000000BA7AE147uLL},
+{0x800000000747AE14uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000008747AE14uLL},
+{0x800000000747AE14uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAAAuLL, 0x000000028747AE12uLL},
+{0x800000000747AE14uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x000000025C9D0368uLL},
+{0x800000000747AE14uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x0000000231F258BEuLL},
+{0x800000000747AE14uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x000000020747AE14uLL},
+{0x800000000747AE14uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000001DC9D036AuLL},
+{0x800000000747AE14uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000001B1F258C0uLL},
+{0x800000000747AE14uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x000000018747AE16uLL},
+{0x800000000747AE14uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x000000025C9D0384uLL},
+{0x800000000747AE14uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x00000000A3579DECuLL},
+{0x800000000747AE14uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000010D685E58uLL},
+{0x800000000747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x000000022BD9F738uLL},
+{0x800000000747AE14uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x000000020747AE14uLL},
+{0x800000000747AE14uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000006747AE14uLL},
+{0x800000000747AE14uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000004747AE14uLL},
+{0x800000000747AE14uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000002747AE14uLL},
+{0x800000000747AE14uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x000000000747AE14uLL},
+{0x800000000747AE14uLL, 0x0000001000000001uLL, 0x0000000007FFFFFFuLL, 0x0000000FFF47AE15uLL},
+{0x800000000747AE14uLL, 0x0000001000000002uLL, 0x0000000007FFFFFFuLL, 0x0000000FF747AE16uLL},
+{0x800000000747AE14uLL, 0x0000001000000003uLL, 0x0000000007FFFFFFuLL, 0x0000000FEF47AE17uLL},
+{0x800000000747AE14uLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x0000000F8747AE24uLL},
+{0x800000000747AE14uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A0B09C0DAuLL},
+{0x800000000747AE14uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x000000032B1CF9D4uLL},
+{0x800000000747AE14uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x000000020F099E90uLL},
+{0x800000000747AE14uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x000000020747AE14uLL},
+{0x800000000747AE14uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x000000091DDE44A9uLL},
+{0x800000000747AE14uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000091656BD22uLL},
+{0x800000000747AE14uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x000000090ECF359BuLL},
+{0x800000000747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B660747AE14uLL},
+{0x800000000747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B660747AE03uLL},
+{0x800000000747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B660747ADF2uLL},
+{0x800000000747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B660747ADE1uLL},
+{0x800000000747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B660747AD04uLL},
+{0x800000000747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B65875D197AuLL},
+{0x800000000747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B658B851EC0uLL},
+{0x800000000747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5D8747AE25uLL},
+{0x800000000747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5D8747AE14uLL},
+{0x800000000747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B550747AE47uLL},
+{0x800000000747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B550747AE36uLL},
+{0x800000000747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B550747AE25uLL},
+{0x800000000747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC0747AE14uLL},
+{0x800000000747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AC0747AE03uLL},
+{0x800000000747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AC0747ADF2uLL},
+{0x800000000747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AC0747ADE1uLL},
+{0x800000000747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AC0747AD04uLL},
+{0x800000000747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AB875D197AuLL},
+{0x800000000747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AB8B851EC0uLL},
+{0x800000000747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A38747AE25uLL},
+{0x800000000747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A38747AE14uLL},
+{0x800000000747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B0747AE47uLL},
+{0x800000000747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B0747AE36uLL},
+{0x800000000747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B0747AE25uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x000000010747AE14uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000010747AE13uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000010747AE12uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000010747AE11uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000010747AE04uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000FFC1691AuLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000008747AE15uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000008747AE14uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x000000000747AE17uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x000000000747AE16uLL},
+{0x800000000747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x000000000747AE15uLL},
+{0x800000000747AE14uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0x800000000747AE14uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0x800000000747AE14uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0x800000000747AE14uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0x800000000747AE14uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0x800000000747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x800000000747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000000747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x800000000747AE14uLL},
+{0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x800000007FFFFFFFuLL, 0x0000000000000002uLL, 0x400000003FFFFFFFuLL, 0x0000000000000001uLL},
+{0x800000007FFFFFFFuLL, 0x0000000000000003uLL, 0x2AAAAAAAD5555555uLL, 0x0000000000000000uLL},
+{0x800000007FFFFFFFuLL, 0x0000000000000010uLL, 0x0800000007FFFFFFuLL, 0x000000000000000FuLL},
+{0x800000007FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000001102D8BD8FuLL, 0x000000000422E659uLL},
+{0x800000007FFFFFFFuLL, 0x000000000747AE14uLL, 0x00000011951952CFuLL, 0x000000000353D5D3uLL},
+{0x800000007FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000002uLL},
+{0x800000007FFFFFFFuLL, 0x0000000080000000uLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000002uLL, 0x0000000000000005uLL},
+{0x800000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000080000001uLL},
+{0x800000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000001uLL, 0x0000000000000000uLL},
+{0x800000007FFFFFFFuLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL},
+{0x800000007FFFFFFFuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0x800000007FFFFFFFuLL, 0x0000000100000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0x800000007FFFFFFFuLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x000000008000007FuLL},
+{0x800000007FFFFFFFuLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x00000000CDBE4C13uLL},
+{0x800000007FFFFFFFuLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000009D19E27BuLL},
+{0x800000007FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x0000000155555554uLL},
+{0x800000007FFFFFFFuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x00000000FFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x000000013FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x00000000FFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x000000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000040000000uLL, 0x000000003FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000000200000002uLL, 0x000000003FFFFFFFuLL, 0x0000000200000001uLL},
+{0x800000007FFFFFFFuLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000002uLL},
+{0x800000007FFFFFFFuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000008000001FuLL},
+{0x800000007FFFFFFFuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x00000000A1843FDDuLL},
+{0x800000007FFFFFFFuLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x00000001B2B07783uLL},
+{0x800000007FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x0000000133333332uLL},
+{0x800000007FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x00000000FFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAABuLL, 0x0000000000000000uLL},
+{0x800000007FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x00000002D5555553uLL},
+{0x800000007FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x00000002AAAAAAA9uLL},
+{0x800000007FFFFFFFuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x0000000255555555uLL},
+{0x800000007FFFFFFFuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAABuLL},
+{0x800000007FFFFFFFuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000200000001uLL},
+{0x800000007FFFFFFFuLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x00000002D555556FuLL},
+{0x800000007FFFFFFFuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000011C0FEFD7uLL},
+{0x800000007FFFFFFFuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000018620B043uLL},
+{0x800000007FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x00000002A4924923uLL},
+{0x800000007FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x000000027FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x00000000DFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x00000000BFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000009FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x000000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000001000000001uLL, 0x0000000008000000uLL, 0x0000000077FFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000001000000002uLL, 0x0000000008000000uLL, 0x000000006FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000001000000003uLL, 0x0000000008000000uLL, 0x0000000067FFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0000001000000010uLL, 0x0000000007FFFFFFuLL, 0x000000100000000FuLL},
+{0x800000007FFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A83C212C5uLL},
+{0x800000007FFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x00000003A3D54BBFuLL},
+{0x800000007FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000287C1F07BuLL},
+{0x800000007FFFFFFFuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x000000027FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000996969694uLL},
+{0x800000007FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000098F0F0F0DuLL},
+{0x800000007FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000987878786uLL},
+{0x800000007FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B667FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B667FFFFFEEuLL},
+{0x800000007FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B667FFFFFDDuLL},
+{0x800000007FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B667FFFFFCCuLL},
+{0x800000007FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B667FFFFEEFuLL},
+{0x800000007FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6600156B65uLL},
+{0x800000007FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B66043D70ABuLL},
+{0x800000007FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5E00000010uLL},
+{0x800000007FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5DFFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5580000032uLL},
+{0x800000007FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5580000021uLL},
+{0x800000007FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5580000010uLL},
+{0x800000007FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFEEuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFDDuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFCCuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFEEFuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AC00156B65uLL},
+{0x800000007FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AC043D70ABuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A400000010uLL},
+{0x800000007FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A3FFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B80000032uLL},
+{0x800000007FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B80000021uLL},
+{0x800000007FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B80000010uLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFCuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFEFuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB05uLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851EBuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x800000007FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x800000007FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x800000007FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x800000007FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0x800000007FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0x800000007FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0x800000007FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0x800000007FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x800000007FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x800000007FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x800000007FFFFFFFuLL},
+{0x8000000080000000uLL, 0x0000000000000001uLL, 0x8000000080000000uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x0000000000000002uLL, 0x4000000040000000uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x0000000000000003uLL, 0x2AAAAAAAD5555555uLL, 0x0000000000000001uLL},
+{0x8000000080000000uLL, 0x0000000000000010uLL, 0x0800000008000000uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x00000000078644FAuLL, 0x0000001102D8BD8FuLL, 0x000000000422E65AuLL},
+{0x8000000080000000uLL, 0x000000000747AE14uLL, 0x00000011951952CFuLL, 0x000000000353D5D4uLL},
+{0x8000000080000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000003uLL, 0x0000000000000003uLL},
+{0x8000000080000000uLL, 0x0000000080000000uLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000002uLL, 0x0000000000000006uLL},
+{0x8000000080000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL, 0x0000000080000002uLL},
+{0x8000000080000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000001uLL, 0x0000000000000001uLL},
+{0x8000000080000000uLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x0000000080000000uLL},
+{0x8000000080000000uLL, 0x0000000100000001uLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0x8000000080000000uLL, 0x0000000100000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL},
+{0x8000000080000000uLL, 0x0000000100000010uLL, 0x000000007FFFFFF8uLL, 0x0000000080000080uLL},
+{0x8000000080000000uLL, 0x00000001078644FAuLL, 0x000000007C585DAEuLL, 0x00000000CDBE4C14uLL},
+{0x8000000080000000uLL, 0x000000010747AE14uLL, 0x000000007C75ED2DuLL, 0x000000009D19E27CuLL},
+{0x8000000080000000uLL, 0x000000017FFFFFFFuLL, 0x0000000055555555uLL, 0x0000000155555555uLL},
+{0x8000000080000000uLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x0000000100000000uLL},
+{0x8000000080000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x0000000140000000uLL},
+{0x8000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000100000000uLL},
+{0x8000000080000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x00000000C0000000uLL},
+{0x8000000080000000uLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x0000000080000000uLL},
+{0x8000000080000000uLL, 0x0000000200000001uLL, 0x0000000040000000uLL, 0x0000000040000000uLL},
+{0x8000000080000000uLL, 0x0000000200000002uLL, 0x0000000040000000uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x0000000200000003uLL, 0x000000003FFFFFFFuLL, 0x00000001C0000003uLL},
+{0x8000000080000000uLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x0000000080000020uLL},
+{0x8000000080000000uLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x00000000A1843FDEuLL},
+{0x8000000080000000uLL, 0x000000020747AE14uLL, 0x000000003F1A4E53uLL, 0x00000001B2B07784uLL},
+{0x8000000080000000uLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x0000000133333333uLL},
+{0x8000000080000000uLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x0000000100000000uLL},
+{0x8000000080000000uLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAABuLL, 0x0000000000000001uLL},
+{0x8000000080000000uLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAAAuLL, 0x00000002D5555554uLL},
+{0x8000000080000000uLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAAAuLL, 0x00000002AAAAAAAAuLL},
+{0x8000000080000000uLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x0000000280000000uLL},
+{0x8000000080000000uLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x0000000255555556uLL},
+{0x8000000080000000uLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x000000022AAAAAACuLL},
+{0x8000000080000000uLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000200000002uLL},
+{0x8000000080000000uLL, 0x0000000300000010uLL, 0x000000002AAAAAA9uLL, 0x00000002D5555570uLL},
+{0x8000000080000000uLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000011C0FEFD8uLL},
+{0x8000000080000000uLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000018620B044uLL},
+{0x8000000080000000uLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x00000002A4924924uLL},
+{0x8000000080000000uLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x0000000280000000uLL},
+{0x8000000080000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x00000000E0000000uLL},
+{0x8000000080000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x00000000C0000000uLL},
+{0x8000000080000000uLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x00000000A0000000uLL},
+{0x8000000080000000uLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x0000000080000000uLL},
+{0x8000000080000000uLL, 0x0000001000000001uLL, 0x0000000008000000uLL, 0x0000000078000000uLL},
+{0x8000000080000000uLL, 0x0000001000000002uLL, 0x0000000008000000uLL, 0x0000000070000000uLL},
+{0x8000000080000000uLL, 0x0000001000000003uLL, 0x0000000008000000uLL, 0x0000000068000000uLL},
+{0x8000000080000000uLL, 0x0000001000000010uLL, 0x0000000008000000uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000A83C212C6uLL},
+{0x8000000080000000uLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x00000003A3D54BC0uLL},
+{0x8000000080000000uLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000287C1F07CuLL},
+{0x8000000080000000uLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x0000000280000000uLL},
+{0x8000000080000000uLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000996969695uLL},
+{0x8000000080000000uLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x000000098F0F0F0EuLL},
+{0x8000000080000000uLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000987878787uLL},
+{0x8000000080000000uLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B6680000000uLL},
+{0x8000000080000000uLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B667FFFFFEFuLL},
+{0x8000000080000000uLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B667FFFFFDEuLL},
+{0x8000000080000000uLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B667FFFFFCDuLL},
+{0x8000000080000000uLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B667FFFFEF0uLL},
+{0x8000000080000000uLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6600156B66uLL},
+{0x8000000080000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B66043D70ACuLL},
+{0x8000000080000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5E00000011uLL},
+{0x8000000080000000uLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5E00000000uLL},
+{0x8000000080000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5580000033uLL},
+{0x8000000080000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5580000022uLL},
+{0x8000000080000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5580000011uLL},
+{0x8000000080000000uLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70AC80000000uLL},
+{0x8000000080000000uLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFEFuLL},
+{0x8000000080000000uLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFDEuLL},
+{0x8000000080000000uLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFFCDuLL},
+{0x8000000080000000uLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70AC7FFFFEF0uLL},
+{0x8000000080000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AC00156B66uLL},
+{0x8000000080000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AC043D70ACuLL},
+{0x8000000080000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A400000011uLL},
+{0x8000000080000000uLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A400000000uLL},
+{0x8000000080000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709B80000033uLL},
+{0x8000000080000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709B80000022uLL},
+{0x8000000080000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709B80000011uLL},
+{0x8000000080000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0x8000000080000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x8000000080000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x8000000080000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x8000000080000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFF0uLL},
+{0x8000000080000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB06uLL},
+{0x8000000080000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851ECuLL},
+{0x8000000080000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x8000000080000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x8000000080000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0x8000000080000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0x8000000080000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0x8000000080000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x8000000080000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x8000000080000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x8000000080000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x8000000080000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0x8000000080000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0x8000000080000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0x8000000080000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x8000000080000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x8000000080000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x8000000080000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x8000000080000000uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000000000002uLL, 0x400000007FFFFFFEuLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000000000003uLL, 0x2AAAAAAAFFFFFFFFuLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000000000010uLL, 0x080000000FFFFFFFuLL, 0x000000000000000DuLL},
+{0x80000000FFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000001102D8BDA0uLL, 0x00000000043851BDuLL},
+{0x80000000FFFFFFFDuLL, 0x000000000747AE14uLL, 0x00000011951952E1uLL, 0x0000000000499869uLL},
+{0x80000000FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000100000004uLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000100000001uLL, 0x000000007FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000002uLL, 0x0000000080000003uLL},
+{0x80000000FFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000002uLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000001uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000080000000uLL, 0x000000007FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000100000003uLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000100000010uLL, 0x000000007FFFFFF9uLL, 0x000000000000006DuLL},
+{0x80000000FFFFFFFDuLL, 0x00000001078644FAuLL, 0x000000007C585DAFuLL, 0x0000000046380717uLL},
+{0x80000000FFFFFFFDuLL, 0x000000010747AE14uLL, 0x000000007C75ED2EuLL, 0x0000000015D23465uLL},
+{0x80000000FFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x0000000055555556uLL, 0x0000000055555553uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000017FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000001BFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000017FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000013FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x00000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000200000001uLL, 0x0000000040000000uLL, 0x00000000BFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000200000002uLL, 0x0000000040000000uLL, 0x000000007FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000200000003uLL, 0x0000000040000000uLL, 0x000000003FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000010000001DuLL},
+{0x80000000FFFFFFFDuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000121843FDBuLL},
+{0x80000000FFFFFFFDuLL, 0x000000020747AE14uLL, 0x000000003F1A4E54uLL, 0x000000002B68C96DuLL},
+{0x80000000FFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000001B3333330uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000017FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAABuLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAABuLL, 0x0000000055555553uLL},
+{0x80000000FFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAABuLL, 0x000000002AAAAAA8uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000002FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000002D5555553uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000002AAAAAAA9uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x000000027FFFFFFFuLL},
+{0x80000000FFFFFFFDuLL, 0x0000000300000010uLL, 0x000000002AAAAAAAuLL, 0x000000005555555DuLL},
+{0x80000000FFFFFFFDuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000019C0FEFD5uLL},
+{0x80000000FFFFFFFDuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000020620B041uLL},
+{0x80000000FFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000324924921uLL},
+{0x80000000FFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000002FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000015FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000013FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000011FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x00000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000001000000001uLL, 0x0000000008000000uLL, 0x00000000F7FFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000001000000002uLL, 0x0000000008000000uLL, 0x00000000EFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000001000000003uLL, 0x0000000008000000uLL, 0x00000000E7FFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0000001000000010uLL, 0x0000000008000000uLL, 0x000000007FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000B03C212C3uLL},
+{0x80000000FFFFFFFDuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000423D54BBDuLL},
+{0x80000000FFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000307C1F079uLL},
+{0x80000000FFFFFFFDuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000002FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000A16969692uLL},
+{0x80000000FFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x0000000A0F0F0F0BuLL},
+{0x80000000FFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000A07878784uLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFECuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFDBuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFCAuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B66FFFFFEEDuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6680156B63uLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B66843D70A9uLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5E8000000EuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5E7FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5600000030uLL},
+{0x80000000FFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B560000001FuLL},
+{0x80000000FFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B560000000EuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFECuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFDBuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFCAuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFEEDuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AC80156B63uLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AC843D70A9uLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A48000000EuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A47FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709C00000030uLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709C0000001FuLL},
+{0x80000000FFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709C0000000EuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFAuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEDuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB03uLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851E9uLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x80000000FFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x80000000FFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x80000000FFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0x80000000FFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0x80000000FFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0x80000000FFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0x80000000FFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFDuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000000000002uLL, 0x400000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000000000003uLL, 0x2AAAAAAAFFFFFFFFuLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000000000010uLL, 0x080000000FFFFFFFuLL, 0x000000000000000EuLL},
+{0x80000000FFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000001102D8BDA0uLL, 0x00000000043851BEuLL},
+{0x80000000FFFFFFFEuLL, 0x000000000747AE14uLL, 0x00000011951952E1uLL, 0x000000000049986AuLL},
+{0x80000000FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000100000004uLL, 0x0000000000000002uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000100000001uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000002uLL, 0x0000000080000004uLL},
+{0x80000000FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000002uLL, 0x0000000000000002uLL},
+{0x80000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000001uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000080000000uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000100000003uLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000100000010uLL, 0x000000007FFFFFF9uLL, 0x000000000000006EuLL},
+{0x80000000FFFFFFFEuLL, 0x00000001078644FAuLL, 0x000000007C585DAFuLL, 0x0000000046380718uLL},
+{0x80000000FFFFFFFEuLL, 0x000000010747AE14uLL, 0x000000007C75ED2EuLL, 0x0000000015D23466uLL},
+{0x80000000FFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x0000000055555556uLL, 0x0000000055555554uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000017FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000001BFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000017FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000013FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x00000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000200000001uLL, 0x0000000040000000uLL, 0x00000000BFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000200000002uLL, 0x0000000040000000uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000200000003uLL, 0x0000000040000000uLL, 0x000000003FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000010000001EuLL},
+{0x80000000FFFFFFFEuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000121843FDCuLL},
+{0x80000000FFFFFFFEuLL, 0x000000020747AE14uLL, 0x000000003F1A4E54uLL, 0x000000002B68C96EuLL},
+{0x80000000FFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000001B3333331uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000017FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAABuLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAABuLL, 0x0000000055555554uLL},
+{0x80000000FFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAABuLL, 0x000000002AAAAAA9uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000002FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000002D5555554uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000002AAAAAAAAuLL},
+{0x80000000FFFFFFFEuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000280000000uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000300000010uLL, 0x000000002AAAAAAAuLL, 0x000000005555555EuLL},
+{0x80000000FFFFFFFEuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000019C0FEFD6uLL},
+{0x80000000FFFFFFFEuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000020620B042uLL},
+{0x80000000FFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000324924922uLL},
+{0x80000000FFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000002FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000015FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000013FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000011FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x00000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000001000000001uLL, 0x0000000008000000uLL, 0x00000000F7FFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000001000000002uLL, 0x0000000008000000uLL, 0x00000000EFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000001000000003uLL, 0x0000000008000000uLL, 0x00000000E7FFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0000001000000010uLL, 0x0000000008000000uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000B03C212C4uLL},
+{0x80000000FFFFFFFEuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000423D54BBEuLL},
+{0x80000000FFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000307C1F07AuLL},
+{0x80000000FFFFFFFEuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000002FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000A16969693uLL},
+{0x80000000FFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x0000000A0F0F0F0CuLL},
+{0x80000000FFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000A07878785uLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFEDuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFDCuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFCBuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B66FFFFFEEEuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6680156B64uLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B66843D70AAuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5E8000000FuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5E7FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5600000031uLL},
+{0x80000000FFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5600000020uLL},
+{0x80000000FFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B560000000FuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFEDuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFDCuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFCBuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFEEEuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AC80156B64uLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AC843D70AAuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A48000000FuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A47FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709C00000031uLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709C00000020uLL},
+{0x80000000FFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709C0000000FuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEEuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB04uLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EAuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x80000000FFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x80000000FFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x80000000FFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0x80000000FFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0x80000000FFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0x80000000FFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0x80000000FFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFEuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000000000002uLL, 0x400000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000000000003uLL, 0x2AAAAAAAFFFFFFFFuLL, 0x0000000000000002uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000000000010uLL, 0x080000000FFFFFFFuLL, 0x000000000000000FuLL},
+{0x80000000FFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000001102D8BDA0uLL, 0x00000000043851BFuLL},
+{0x80000000FFFFFFFFuLL, 0x000000000747AE14uLL, 0x00000011951952E1uLL, 0x000000000049986BuLL},
+{0x80000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000100000004uLL, 0x0000000000000003uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000100000001uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000080000002uLL, 0x0000000080000005uLL},
+{0x80000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000080000002uLL, 0x0000000000000003uLL},
+{0x80000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000080000001uLL, 0x0000000080000000uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000100000002uLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000100000003uLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000100000010uLL, 0x000000007FFFFFF9uLL, 0x000000000000006FuLL},
+{0x80000000FFFFFFFFuLL, 0x00000001078644FAuLL, 0x000000007C585DAFuLL, 0x0000000046380719uLL},
+{0x80000000FFFFFFFFuLL, 0x000000010747AE14uLL, 0x000000007C75ED2EuLL, 0x0000000015D23467uLL},
+{0x80000000FFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x0000000055555556uLL, 0x0000000055555555uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000180000000uLL, 0x0000000055555555uLL, 0x000000017FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000001BFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000017FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000013FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000200000000uLL, 0x0000000040000000uLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000200000001uLL, 0x0000000040000000uLL, 0x00000000BFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000200000002uLL, 0x0000000040000000uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000200000003uLL, 0x0000000040000000uLL, 0x000000003FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000200000010uLL, 0x000000003FFFFFFEuLL, 0x000000010000001FuLL},
+{0x80000000FFFFFFFFuLL, 0x00000002078644FAuLL, 0x000000003F12B425uLL, 0x0000000121843FDDuLL},
+{0x80000000FFFFFFFFuLL, 0x000000020747AE14uLL, 0x000000003F1A4E54uLL, 0x000000002B68C96FuLL},
+{0x80000000FFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000033333333uLL, 0x00000001B3333332uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000033333333uLL, 0x000000017FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x000000002AAAAAABuLL, 0x0000000080000000uLL},
+{0x80000000FFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x000000002AAAAAABuLL, 0x0000000055555555uLL},
+{0x80000000FFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x000000002AAAAAABuLL, 0x000000002AAAAAAAuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000300000000uLL, 0x000000002AAAAAAAuLL, 0x00000002FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000300000001uLL, 0x000000002AAAAAAAuLL, 0x00000002D5555555uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000300000002uLL, 0x000000002AAAAAAAuLL, 0x00000002AAAAAAABuLL},
+{0x80000000FFFFFFFFuLL, 0x0000000300000003uLL, 0x000000002AAAAAAAuLL, 0x0000000280000001uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000300000010uLL, 0x000000002AAAAAAAuLL, 0x000000005555555FuLL},
+{0x80000000FFFFFFFFuLL, 0x00000003078644FAuLL, 0x000000002A40B0A4uLL, 0x000000019C0FEFD7uLL},
+{0x80000000FFFFFFFFuLL, 0x000000030747AE14uLL, 0x000000002A4419E3uLL, 0x000000020620B043uLL},
+{0x80000000FFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000024924924uLL, 0x0000000324924923uLL},
+{0x80000000FFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000024924924uLL, 0x00000002FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000020000000uLL, 0x000000015FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000020000000uLL, 0x000000013FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000020000000uLL, 0x000000011FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000001000000000uLL, 0x0000000008000000uLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000001000000001uLL, 0x0000000008000000uLL, 0x00000000F7FFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000001000000002uLL, 0x0000000008000000uLL, 0x00000000EFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000001000000003uLL, 0x0000000008000000uLL, 0x00000000E7FFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0000001000000010uLL, 0x0000000008000000uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000010078644FAuLL, 0x0000000007FC3EA1uLL, 0x0000000B03C212C5uLL},
+{0x80000000FFFFFFFFuLL, 0x000000100747AE14uLL, 0x0000000007FC5DD0uLL, 0x0000000423D54BBFuLL},
+{0x80000000FFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x0000000007C1F07CuLL, 0x0000000307C1F07BuLL},
+{0x80000000FFFFFFFFuLL, 0x0000001080000000uLL, 0x0000000007C1F07CuLL, 0x00000002FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x0000000007878787uLL, 0x0000000A16969694uLL},
+{0x80000000FFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x0000000007878787uLL, 0x0000000A0F0F0F0DuLL},
+{0x80000000FFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x0000000007878787uLL, 0x0000000A07878786uLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFEEuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFDDuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000011uLL, 0x00156B66FFFFFFCCuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000011uLL, 0x00156B66FFFFFEEFuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000011uLL, 0x00156B6680156B65uLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000011uLL, 0x00156B66843D70ABuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5E80000010uLL},
+{0x80000000FFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000011uLL, 0x00156B5E7FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000011uLL, 0x00156B5600000032uLL},
+{0x80000000FFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000011uLL, 0x00156B5600000021uLL},
+{0x80000000FFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000011uLL, 0x00156B5600000010uLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFEEuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFDDuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFFCCuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000011uLL, 0x043D70ACFFFFFEEFuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000011uLL, 0x043D70AC80156B65uLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000011uLL, 0x043D70AC843D70ABuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000011uLL, 0x043D70A480000010uLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000011uLL, 0x043D70A47FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000011uLL, 0x043D709C00000032uLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000011uLL, 0x043D709C00000021uLL},
+{0x80000000FFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000011uLL, 0x043D709C00000010uLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEFuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB05uLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EBuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0x80000000FFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0x80000000FFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0x80000000FFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0x80000000FFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0x80000000FFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0x80000000FFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0x80000000FFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0x80000000FFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0x80000000FFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0x80000000FFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0x80000000FFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0x80000000FFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0x80000000FFFFFFFFuLL},
+{0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000000000002uLL, 0x7FFFFFFE80000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000000000003uLL, 0x5555555455555555uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000000000010uLL, 0x0FFFFFFFD0000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000000078644FAuLL, 0x0000002205B17A97uLL, 0x0000000000142C8AuLL},
+{0xFFFFFFFD00000000uLL, 0x000000000747AE14uLL, 0x000000232A32A512uLL, 0x0000000001DADE98uLL},
+{0xFFFFFFFD00000000uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD00000000uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFD00000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFD00000000uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000004uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000AuLL},
+{0xFFFFFFFD00000000uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000000000012uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x0000000000000130uLL},
+{0xFFFFFFFD00000000uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B20F6716uLL},
+{0xFFFFFFFD00000000uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000500ACF34uLL},
+{0xFFFFFFFD00000000uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000002AAAAAA9uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x0000000100000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD00000000uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFD00000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFD00000000uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x0000000100000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000002uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000004uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x0000000180000009uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x0000000100000060uLL},
+{0xFFFFFFFD00000000uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001521509B0uLL},
+{0xFFFFFFFD00000000uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x000000016CA89D1CuLL},
+{0xFFFFFFFD00000000uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000E6666665uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000080000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFD00000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001AAAAAAA8uLL},
+{0xFFFFFFFD00000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555554uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000100000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000AAAAAAACuLL},
+{0xFFFFFFFD00000000uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000055555558uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000000000004uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001AAAAAAE0uLL},
+{0xFFFFFFFD00000000uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000013FA624AAuLL},
+{0xFFFFFFFD00000000uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000213890E9CuLL},
+{0xFFFFFFFD00000000uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000149249248uLL},
+{0xFFFFFFFD00000000uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000100000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFDuLL},
+{0xFFFFFFFD00000000uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFD00000000uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000013FFFFFFFuLL},
+{0xFFFFFFFD00000000uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF0000001uLL},
+{0xFFFFFFFD00000000uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE0000002uLL},
+{0xFFFFFFFD00000000uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD0000003uLL},
+{0xFFFFFFFD00000000uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C00000010uLL},
+{0xFFFFFFFD00000000uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000000FFFDE092uLL},
+{0xFFFFFFFD00000000uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000347AA9780uLL},
+{0xFFFFFFFD00000000uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000010F83E0F8uLL},
+{0xFFFFFFFD00000000uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000100000000uLL},
+{0xFFFFFFFD00000000uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F2D2D2D2AuLL},
+{0xFFFFFFFD00000000uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F1E1E1E1CuLL},
+{0xFFFFFFFD00000000uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F0F0F0F0EuLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C900000000uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFDEuLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFBCuLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFF9AuLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFDE0uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8002AD6CCuLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8087AE158uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B800000022uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B800000000uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A700000066uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A700000044uLL},
+{0xFFFFFFFD00000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A700000022uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334100000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333340FFFFFFDDuLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333340FFFFFFBAuLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333340FFFFFF97uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333340FFFFFDD0uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133333FF8A491D2uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334001333344uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F80000023uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F80000000uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E00000069uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E00000046uLL},
+{0xFFFFFFFD00000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E00000023uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF0uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB06uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851ECuLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000000uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFD00000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFD00000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFFuLL},
+{0xFFFFFFFD00000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFEuLL},
+{0xFFFFFFFD00000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFDuLL},
+{0xFFFFFFFD00000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFF0uLL},
+{0xFFFFFFFD00000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFCF879BB06uLL},
+{0xFFFFFFFD00000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFCF8B851ECuLL},
+{0xFFFFFFFD00000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000001uLL},
+{0xFFFFFFFD00000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC80000000uLL},
+{0xFFFFFFFD00000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000003uLL},
+{0xFFFFFFFD00000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000002uLL},
+{0xFFFFFFFD00000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000001uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000000uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000000000002uLL, 0x7FFFFFFE80000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000000000003uLL, 0x5555555455555555uLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000000000010uLL, 0x0FFFFFFFD0000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000000078644FAuLL, 0x0000002205B17A97uLL, 0x0000000000142C8BuLL},
+{0xFFFFFFFD00000001uLL, 0x000000000747AE14uLL, 0x000000232A32A512uLL, 0x0000000001DADE99uLL},
+{0xFFFFFFFD00000001uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFD00000001uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000005uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000BuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000000000013uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x0000000000000131uLL},
+{0xFFFFFFFD00000001uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B20F6717uLL},
+{0xFFFFFFFD00000001uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000500ACF35uLL},
+{0xFFFFFFFD00000001uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000002AAAAAAAuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x0000000100000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD00000001uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFD00000001uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x0000000100000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000003uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000005uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x000000018000000AuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x0000000100000061uLL},
+{0xFFFFFFFD00000001uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001521509B1uLL},
+{0xFFFFFFFD00000001uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x000000016CA89D1DuLL},
+{0xFFFFFFFD00000001uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000E6666666uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000080000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFD00000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001AAAAAAA9uLL},
+{0xFFFFFFFD00000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555555uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000100000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000AAAAAAADuLL},
+{0xFFFFFFFD00000001uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000055555559uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000000000005uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001AAAAAAE1uLL},
+{0xFFFFFFFD00000001uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000013FA624ABuLL},
+{0xFFFFFFFD00000001uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000213890E9DuLL},
+{0xFFFFFFFD00000001uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000149249249uLL},
+{0xFFFFFFFD00000001uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000100000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFEuLL},
+{0xFFFFFFFD00000001uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD00000001uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000140000000uLL},
+{0xFFFFFFFD00000001uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF0000002uLL},
+{0xFFFFFFFD00000001uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE0000003uLL},
+{0xFFFFFFFD00000001uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD0000004uLL},
+{0xFFFFFFFD00000001uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C00000011uLL},
+{0xFFFFFFFD00000001uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000000FFFDE093uLL},
+{0xFFFFFFFD00000001uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000347AA9781uLL},
+{0xFFFFFFFD00000001uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000010F83E0F9uLL},
+{0xFFFFFFFD00000001uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000100000001uLL},
+{0xFFFFFFFD00000001uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F2D2D2D2BuLL},
+{0xFFFFFFFD00000001uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F1E1E1E1DuLL},
+{0xFFFFFFFD00000001uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F0F0F0F0FuLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C900000001uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFDFuLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFBDuLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFF9BuLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFDE1uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8002AD6CDuLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8087AE159uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B800000023uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B800000001uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A700000067uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A700000045uLL},
+{0xFFFFFFFD00000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A700000023uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334100000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333340FFFFFFDEuLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333340FFFFFFBBuLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333340FFFFFF98uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333340FFFFFDD1uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133333FF8A491D3uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334001333345uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F80000024uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F80000001uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E0000006AuLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E00000047uLL},
+{0xFFFFFFFD00000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E00000024uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF1uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB07uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EDuLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000004uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFD00000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFD00000001uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD00000001uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFFuLL},
+{0xFFFFFFFD00000001uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFEuLL},
+{0xFFFFFFFD00000001uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFF1uLL},
+{0xFFFFFFFD00000001uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFCF879BB07uLL},
+{0xFFFFFFFD00000001uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFCF8B851EDuLL},
+{0xFFFFFFFD00000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000002uLL},
+{0xFFFFFFFD00000001uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC80000001uLL},
+{0xFFFFFFFD00000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000004uLL},
+{0xFFFFFFFD00000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000003uLL},
+{0xFFFFFFFD00000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000002uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000001uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000000000002uLL, 0x7FFFFFFE80000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000000000003uLL, 0x5555555455555556uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000000000010uLL, 0x0FFFFFFFD0000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000000078644FAuLL, 0x0000002205B17A97uLL, 0x0000000000142C8CuLL},
+{0xFFFFFFFD00000002uLL, 0x000000000747AE14uLL, 0x000000232A32A512uLL, 0x0000000001DADE9AuLL},
+{0xFFFFFFFD00000002uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000006uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000CuLL},
+{0xFFFFFFFD00000002uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000000000014uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x0000000000000132uLL},
+{0xFFFFFFFD00000002uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B20F6718uLL},
+{0xFFFFFFFD00000002uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000500ACF36uLL},
+{0xFFFFFFFD00000002uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000002AAAAAABuLL},
+{0xFFFFFFFD00000002uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x0000000100000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFD00000002uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x0000000180000000uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x0000000100000002uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000004uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000006uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x000000018000000BuLL},
+{0xFFFFFFFD00000002uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x0000000100000062uLL},
+{0xFFFFFFFD00000002uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001521509B2uLL},
+{0xFFFFFFFD00000002uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x000000016CA89D1EuLL},
+{0xFFFFFFFD00000002uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000E6666667uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000080000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFD00000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001AAAAAAAAuLL},
+{0xFFFFFFFD00000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555556uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000100000002uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000AAAAAAAEuLL},
+{0xFFFFFFFD00000002uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000005555555AuLL},
+{0xFFFFFFFD00000002uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000000000006uLL},
+{0xFFFFFFFD00000002uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001AAAAAAE2uLL},
+{0xFFFFFFFD00000002uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000013FA624ACuLL},
+{0xFFFFFFFD00000002uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000213890E9EuLL},
+{0xFFFFFFFD00000002uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x000000014924924AuLL},
+{0xFFFFFFFD00000002uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000100000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFFuLL},
+{0xFFFFFFFD00000002uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000180000000uLL},
+{0xFFFFFFFD00000002uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000140000001uLL},
+{0xFFFFFFFD00000002uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000002uLL},
+{0xFFFFFFFD00000002uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF0000003uLL},
+{0xFFFFFFFD00000002uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE0000004uLL},
+{0xFFFFFFFD00000002uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD0000005uLL},
+{0xFFFFFFFD00000002uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C00000012uLL},
+{0xFFFFFFFD00000002uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000000FFFDE094uLL},
+{0xFFFFFFFD00000002uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000347AA9782uLL},
+{0xFFFFFFFD00000002uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000010F83E0FAuLL},
+{0xFFFFFFFD00000002uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000100000002uLL},
+{0xFFFFFFFD00000002uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F2D2D2D2CuLL},
+{0xFFFFFFFD00000002uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F1E1E1E1EuLL},
+{0xFFFFFFFD00000002uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F0F0F0F10uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C900000002uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFE0uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFBEuLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFF9CuLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFDE2uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8002AD6CEuLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8087AE15AuLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B800000024uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B800000002uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A700000068uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A700000046uLL},
+{0xFFFFFFFD00000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A700000024uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334100000002uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333340FFFFFFDFuLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333340FFFFFFBCuLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333340FFFFFF99uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333340FFFFFDD2uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133333FF8A491D4uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334001333346uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F80000025uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F80000002uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E0000006BuLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E00000048uLL},
+{0xFFFFFFFD00000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E00000025uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF2uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB08uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EEuLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000003uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000005uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000004uLL},
+{0xFFFFFFFD00000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFD00000002uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFD00000002uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD00000002uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFFuLL},
+{0xFFFFFFFD00000002uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFF2uLL},
+{0xFFFFFFFD00000002uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFCF879BB08uLL},
+{0xFFFFFFFD00000002uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFCF8B851EEuLL},
+{0xFFFFFFFD00000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000003uLL},
+{0xFFFFFFFD00000002uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC80000002uLL},
+{0xFFFFFFFD00000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000005uLL},
+{0xFFFFFFFD00000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000004uLL},
+{0xFFFFFFFD00000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000003uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000002uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000000000002uLL, 0x7FFFFFFE80000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000000000003uLL, 0x5555555455555556uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000000000010uLL, 0x0FFFFFFFD0000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000000078644FAuLL, 0x0000002205B17A97uLL, 0x0000000000142C8DuLL},
+{0xFFFFFFFD00000003uLL, 0x000000000747AE14uLL, 0x000000232A32A512uLL, 0x0000000001DADE9BuLL},
+{0xFFFFFFFD00000003uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x0000000000000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000007uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000DuLL},
+{0xFFFFFFFD00000003uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000000000015uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x0000000000000133uLL},
+{0xFFFFFFFD00000003uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B20F6719uLL},
+{0xFFFFFFFD00000003uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000500ACF37uLL},
+{0xFFFFFFFD00000003uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000002AAAAAACuLL},
+{0xFFFFFFFD00000003uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x0000000100000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0xFFFFFFFD00000003uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x0000000180000001uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x0000000100000003uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000005uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000007uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x000000018000000CuLL},
+{0xFFFFFFFD00000003uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x0000000100000063uLL},
+{0xFFFFFFFD00000003uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001521509B3uLL},
+{0xFFFFFFFD00000003uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x000000016CA89D1FuLL},
+{0xFFFFFFFD00000003uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000E6666668uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000080000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFD00000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001AAAAAAABuLL},
+{0xFFFFFFFD00000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555557uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000100000003uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000AAAAAAAFuLL},
+{0xFFFFFFFD00000003uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000005555555BuLL},
+{0xFFFFFFFD00000003uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000000000007uLL},
+{0xFFFFFFFD00000003uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001AAAAAAE3uLL},
+{0xFFFFFFFD00000003uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000013FA624ADuLL},
+{0xFFFFFFFD00000003uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000213890E9FuLL},
+{0xFFFFFFFD00000003uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x000000014924924BuLL},
+{0xFFFFFFFD00000003uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000100000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C0000000uLL},
+{0xFFFFFFFD00000003uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000180000001uLL},
+{0xFFFFFFFD00000003uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000140000002uLL},
+{0xFFFFFFFD00000003uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000003uLL},
+{0xFFFFFFFD00000003uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF0000004uLL},
+{0xFFFFFFFD00000003uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE0000005uLL},
+{0xFFFFFFFD00000003uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD0000006uLL},
+{0xFFFFFFFD00000003uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C00000013uLL},
+{0xFFFFFFFD00000003uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000000FFFDE095uLL},
+{0xFFFFFFFD00000003uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000347AA9783uLL},
+{0xFFFFFFFD00000003uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000010F83E0FBuLL},
+{0xFFFFFFFD00000003uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000100000003uLL},
+{0xFFFFFFFD00000003uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F2D2D2D2DuLL},
+{0xFFFFFFFD00000003uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F1E1E1E1FuLL},
+{0xFFFFFFFD00000003uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F0F0F0F11uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C900000003uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFE1uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFBFuLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFF9DuLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFDE3uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8002AD6CFuLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8087AE15BuLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B800000025uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B800000003uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A700000069uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A700000047uLL},
+{0xFFFFFFFD00000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A700000025uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334100000003uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333340FFFFFFE0uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333340FFFFFFBDuLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333340FFFFFF9AuLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333340FFFFFDD3uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133333FF8A491D5uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334001333347uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F80000026uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F80000003uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E0000006CuLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E00000049uLL},
+{0xFFFFFFFD00000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E00000026uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF3uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB09uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EFuLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000004uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000003uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000006uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000005uLL},
+{0xFFFFFFFD00000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000004uLL},
+{0xFFFFFFFD00000003uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFD00000003uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFD00000003uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD00000003uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFF3uLL},
+{0xFFFFFFFD00000003uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFCF879BB09uLL},
+{0xFFFFFFFD00000003uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFCF8B851EFuLL},
+{0xFFFFFFFD00000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000004uLL},
+{0xFFFFFFFD00000003uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC80000003uLL},
+{0xFFFFFFFD00000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000006uLL},
+{0xFFFFFFFD00000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000005uLL},
+{0xFFFFFFFD00000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000004uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000003uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000000000002uLL, 0x7FFFFFFE80000008uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000000000003uLL, 0x555555545555555AuLL, 0x0000000000000002uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000000000010uLL, 0x0FFFFFFFD0000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000010uLL, 0x00000000078644FAuLL, 0x0000002205B17A97uLL, 0x0000000000142C9AuLL},
+{0xFFFFFFFD00000010uLL, 0x000000000747AE14uLL, 0x000000232A32A512uLL, 0x0000000001DADEA8uLL},
+{0xFFFFFFFD00000010uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000000000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x0000000000000010uLL},
+{0xFFFFFFFD00000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0xFFFFFFFD00000010uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x000000000000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x000000000000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000010uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000014uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000000000001AuLL},
+{0xFFFFFFFD00000010uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000000000022uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x0000000000000140uLL},
+{0xFFFFFFFD00000010uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B20F6726uLL},
+{0xFFFFFFFD00000010uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000500ACF44uLL},
+{0xFFFFFFFD00000010uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000002AAAAAB9uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x0000000100000010uLL},
+{0xFFFFFFFD00000010uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000008000000DuLL},
+{0xFFFFFFFD00000010uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000000000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x000000018000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x0000000100000010uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000080000012uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000000000014uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x0000000180000019uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x0000000100000070uLL},
+{0xFFFFFFFD00000010uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001521509C0uLL},
+{0xFFFFFFFD00000010uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x000000016CA89D2CuLL},
+{0xFFFFFFFD00000010uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000E6666675uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000080000010uLL},
+{0xFFFFFFFD00000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x000000020000000CuLL},
+{0xFFFFFFFD00000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001AAAAAAB8uLL},
+{0xFFFFFFFD00000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000155555564uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000100000010uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000AAAAAABCuLL},
+{0xFFFFFFFD00000010uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000055555568uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000000000014uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001AAAAAAF0uLL},
+{0xFFFFFFFD00000010uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000013FA624BAuLL},
+{0xFFFFFFFD00000010uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000213890EACuLL},
+{0xFFFFFFFD00000010uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000149249258uLL},
+{0xFFFFFFFD00000010uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000100000010uLL},
+{0xFFFFFFFD00000010uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C000000DuLL},
+{0xFFFFFFFD00000010uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000018000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000014000000FuLL},
+{0xFFFFFFFD00000010uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000010uLL},
+{0xFFFFFFFD00000010uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF0000011uLL},
+{0xFFFFFFFD00000010uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE0000012uLL},
+{0xFFFFFFFD00000010uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD0000013uLL},
+{0xFFFFFFFD00000010uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C00000020uLL},
+{0xFFFFFFFD00000010uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000000FFFDE0A2uLL},
+{0xFFFFFFFD00000010uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000347AA9790uLL},
+{0xFFFFFFFD00000010uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000010F83E108uLL},
+{0xFFFFFFFD00000010uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000100000010uLL},
+{0xFFFFFFFD00000010uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F2D2D2D3AuLL},
+{0xFFFFFFFD00000010uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F1E1E1E2CuLL},
+{0xFFFFFFFD00000010uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F0F0F0F1EuLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C900000010uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFEEuLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFCCuLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFFAAuLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C8FFFFFDF0uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8002AD6DCuLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8087AE168uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B800000032uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B800000010uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A700000076uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A700000054uLL},
+{0xFFFFFFFD00000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A700000032uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334100000010uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333340FFFFFFEDuLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333340FFFFFFCAuLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333340FFFFFFA7uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333340FFFFFDE0uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133333FF8A491E2uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334001333354uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F80000033uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F80000010uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E00000079uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E00000056uLL},
+{0xFFFFFFFD00000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E00000033uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000010uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE0000000FuLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE0000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE0000000DuLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB16uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851FCuLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000011uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000010uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000013uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000012uLL},
+{0xFFFFFFFD00000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000011uLL},
+{0xFFFFFFFD00000010uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD0000000FuLL},
+{0xFFFFFFFD00000010uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD0000000EuLL},
+{0xFFFFFFFD00000010uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFD0000000DuLL},
+{0xFFFFFFFD00000010uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD00000010uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFCF879BB16uLL},
+{0xFFFFFFFD00000010uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFCF8B851FCuLL},
+{0xFFFFFFFD00000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000011uLL},
+{0xFFFFFFFD00000010uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC80000010uLL},
+{0xFFFFFFFD00000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000013uLL},
+{0xFFFFFFFD00000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000012uLL},
+{0xFFFFFFFD00000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC00000011uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD00000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD00000010uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000000000002uLL, 0x7FFFFFFE83C3227DuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000000000003uLL, 0x5555555457D76C53uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000000000010uLL, 0x0FFFFFFFD078644FuLL, 0x000000000000000AuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000000078644FAuLL, 0x0000002205B17A98uLL, 0x0000000000142C8AuLL},
+{0xFFFFFFFD078644FAuLL, 0x000000000747AE14uLL, 0x000000232A32A513uLL, 0x000000000219757EuLL},
+{0xFFFFFFFD078644FAuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x00000000078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x00000000078644FEuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x0000000007864504uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x000000000786450CuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x000000000786462AuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B995AC10uLL},
+{0xFFFFFFFD078644FAuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x000000005791142EuLL},
+{0xFFFFFFFD078644FAuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000003230EFA3uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x00000000878644F7uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000000078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x00000001878644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x00000001078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x00000000878644FCuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x00000000078644FEuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x0000000187864503uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x000000010786455AuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001599B4EAAuLL},
+{0xFFFFFFFD078644FAuLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x00000001742EE216uLL},
+{0xFFFFFFFD078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000EDECAB5FuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x00000000878644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000002078644F6uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001B230EFA2uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x000000015CDB9A4EuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000B230EFA6uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000005CDB9A52uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x00000000078644FEuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001B230EFDAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x00000001472C69A4uLL},
+{0xFFFFFFFD078644FAuLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x000000021B0F5396uLL},
+{0xFFFFFFFD078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000150AAD742uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C78644F7uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000001878644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000001478644F9uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF78644FBuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE78644FCuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD78644FDuLL},
+{0xFFFFFFFD078644FAuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C0786450AuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000010784258CuLL},
+{0xFFFFFFFD078644FAuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x000000034F30DC7AuLL},
+{0xFFFFFFFD078644FAuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x00000001170A25F2uLL},
+{0xFFFFFFFD078644FAuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F34B37224uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F25A46316uLL},
+{0xFFFFFFFD078644FAuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F16955408uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C9078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9078644D8uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9078644B6uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C907864494uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9078642DAuLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C807B11BC6uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C810012652uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B80786451CuLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B8078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A707864560uLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A70786453EuLL},
+{0xFFFFFFFD078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A70786451CuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333341078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341078644D7uLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341078644B4uLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x0133334107864491uLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341078642CAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340002AD6CCuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334008B9783EuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F8786451DuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F878644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E07864563uLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E07864540uLL},
+{0xFFFFFFFD078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E0786451DuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644F9uLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644F7uLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644EAuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE003E96E6uLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD878644FBuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD878644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FDuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FCuLL},
+{0xFFFFFFFD078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FBuLL},
+{0xFFFFFFFD078644FAuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD078644F9uLL},
+{0xFFFFFFFD078644FAuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFD078644F7uLL},
+{0xFFFFFFFD078644FAuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFD078644EAuLL},
+{0xFFFFFFFD078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFD003E96E6uLL},
+{0xFFFFFFFD078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC878644FBuLL},
+{0xFFFFFFFD078644FAuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC878644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC078644FDuLL},
+{0xFFFFFFFD078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC078644FCuLL},
+{0xFFFFFFFD078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC078644FBuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD078644FAuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000000000002uLL, 0x7FFFFFFE83A3D70AuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000000000003uLL, 0x5555555457C28F5CuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000000000010uLL, 0x0FFFFFFFD0747AE1uLL, 0x0000000000000004uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000000078644FAuLL, 0x0000002205B17A97uLL, 0x00000000075BDA9EuLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000000747AE14uLL, 0x000000232A32A513uLL, 0x0000000001DADE98uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000000747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x000000000747AE18uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000000747AE1EuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x000000000747AE26uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x000000000747AF44uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB59uLL, 0x00000000B957152AuLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x0000000057527D48uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x0000000031F258BDuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000008747AE11uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000000747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x000000018747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x000000010747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x000000008747AE16uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x000000000747AE18uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000200000003uLL, 0x000000007FFFFFFDuLL, 0x000000018747AE1DuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x000000010747AE74uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001595CB7C4uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x0000000173F04B30uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000000EDAE1479uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000008747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x000000020747AE10uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000001B1F258BCuLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x000000015C9D0368uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000000B1F258C0uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000005C9D036CuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x000000000747AE18uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000001B1F258F4uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x0000000146EDD2BEuLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x000000021AD0BCB0uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000001506C405CuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000001C747AE11uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000018747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000014747AE13uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000CF747AE15uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000CE747AE16uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000CD747AE17uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C0747AE24uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x0000000107458EA6uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x000000034EF24594uLL},
+{0xFFFFFFFD0747AE14uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x0000000116CB8F0CuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000F3474DB3EuLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F2565CC30uLL},
+{0xFFFFFFFD0747AE14uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F1656BD22uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C90747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C90747ADF2uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C90747ADD0uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C90747ADAEuLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C90747ABF4uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8077284E0uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C80FC28F6CuLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B80747AE36uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B80747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A70747AE7AuLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A70747AE58uLL},
+{0xFFFFFFFD0747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A70747AE36uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x013333410747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333410747ADF1uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333410747ADCEuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333410747ADABuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333410747ABE4uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133333FFFEC3FE6uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x01333340087AE158uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133332F8747AE37uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332F8747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E0747AE7DuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E0747AE5AuLL},
+{0xFFFFFFFD0747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E0747AE37uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE13uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE11uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE04uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFC1691AuLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD8747AE15uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD8747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE17uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE16uLL},
+{0xFFFFFFFD0747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE15uLL},
+{0xFFFFFFFD0747AE14uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE13uLL},
+{0xFFFFFFFD0747AE14uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE11uLL},
+{0xFFFFFFFD0747AE14uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE04uLL},
+{0xFFFFFFFD0747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFCFFC1691AuLL},
+{0xFFFFFFFD0747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD0747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC8747AE15uLL},
+{0xFFFFFFFD0747AE14uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFC8747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC0747AE17uLL},
+{0xFFFFFFFD0747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC0747AE16uLL},
+{0xFFFFFFFD0747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC0747AE15uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD0747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD0747AE14uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000002uLL, 0x7FFFFFFEBFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000003uLL, 0x555555547FFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000010uLL, 0x0FFFFFFFD7FFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000002205B17AA8uLL, 0x00000000002997EFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000000747AE14uLL, 0x000000232A32A523uLL, 0x0000000006184F43uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFAuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000080000003uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x0000000080000009uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000080000011uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x000000008000012FuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x000000002A89221BuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000D00ACF33uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x00000000AAAAAAA8uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA8uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000100000001uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000080000003uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000000000005uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x000000018000005FuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001D21509AFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x00000001ECA89D1BuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x0000000166666664uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x000000027FFFFFFBuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x000000022AAAAAA7uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x00000001D5555553uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x000000012AAAAAABuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x00000000D5555557uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000080000003uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x000000022AAAAADFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x00000001BFA624A9uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000293890E9BuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000001C9249247uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x000000023FFFFFFCuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFEuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000D70000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000D60000001uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000D50000002uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C8000000FuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000017FFDE091uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x00000003C7AA977FuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000018F83E0F7uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000FAD2D2D29uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F9E1E1E1BuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F8F0F0F0DuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFFDDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFFBBuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFF99uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFDDFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8802AD6CBuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8887AE157uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B880000021uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B87FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A780000065uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A780000043uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A780000021uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x013333417FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333417FFFFFDCuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333417FFFFFB9uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333417FFFFF96uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333417FFFFDCFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133334078A491D1uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334081333343uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333000000022uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133332FFFFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E80000068uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E80000045uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E80000022uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFCuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFEFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFE7879BB05uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE78B851EBuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFEuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFCuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFEFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFD7879BB05uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFD78B851EBuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000002uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000001uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000000000002uLL, 0x7FFFFFFEC0000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000000000003uLL, 0x5555555480000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000000000010uLL, 0x0FFFFFFFD8000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000000078644FAuLL, 0x0000002205B17AA8uLL, 0x00000000002997F0uLL},
+{0xFFFFFFFD80000000uLL, 0x000000000747AE14uLL, 0x000000232A32A523uLL, 0x0000000006184F44uLL},
+{0xFFFFFFFD80000000uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFBuLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL, 0x0000000080000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFCuLL, 0x0000000080000004uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFBuLL, 0x000000008000000AuLL},
+{0xFFFFFFFD80000000uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFAuLL, 0x0000000080000012uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEDuLL, 0x0000000080000130uLL},
+{0xFFFFFFFD80000000uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x000000002A89221CuLL},
+{0xFFFFFFFD80000000uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA57uLL, 0x00000000D00ACF34uLL},
+{0xFFFFFFFD80000000uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x00000000AAAAAAA9uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFD80000000uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x0000000180000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000100000002uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000080000004uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000000000006uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000200000010uLL, 0x000000007FFFFFFAuLL, 0x0000000180000060uLL},
+{0xFFFFFFFD80000000uLL, 0x00000002078644FAuLL, 0x000000007E256848uLL, 0x00000001D21509B0uLL},
+{0xFFFFFFFD80000000uLL, 0x000000020747AE14uLL, 0x000000007E349CA5uLL, 0x00000001ECA89D1CuLL},
+{0xFFFFFFFD80000000uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x0000000166666665uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000100000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x000000027FFFFFFCuLL},
+{0xFFFFFFFD80000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x000000022AAAAAA8uLL},
+{0xFFFFFFFD80000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x00000001D5555554uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000180000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x000000012AAAAAACuLL},
+{0xFFFFFFFD80000000uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x00000000D5555558uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000080000004uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x000000022AAAAAE0uLL},
+{0xFFFFFFFD80000000uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x00000001BFA624AAuLL},
+{0xFFFFFFFD80000000uLL, 0x000000030747AE14uLL, 0x00000000548833C5uLL, 0x0000000293890E9CuLL},
+{0xFFFFFFFD80000000uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000001C9249248uLL},
+{0xFFFFFFFD80000000uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000180000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x000000023FFFFFFDuLL},
+{0xFFFFFFFD80000000uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000001BFFFFFFFuLL},
+{0xFFFFFFFD80000000uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000D80000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000D70000001uLL},
+{0xFFFFFFFD80000000uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000D60000002uLL},
+{0xFFFFFFFD80000000uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000D50000003uLL},
+{0xFFFFFFFD80000000uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000C80000010uLL},
+{0xFFFFFFFD80000000uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000017FFDE092uLL},
+{0xFFFFFFFD80000000uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x00000003C7AA9780uLL},
+{0xFFFFFFFD80000000uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000018F83E0F8uLL},
+{0xFFFFFFFD80000000uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000180000000uLL},
+{0xFFFFFFFD80000000uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000000FAD2D2D2AuLL},
+{0xFFFFFFFD80000000uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000000F9E1E1E1CuLL},
+{0xFFFFFFFD80000000uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000000F8F0F0F0EuLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C980000000uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFFDEuLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFFBCuLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFF9AuLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C97FFFFDE0uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C8802AD6CCuLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C8887AE158uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B880000022uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B880000000uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A780000066uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A780000044uLL},
+{0xFFFFFFFD80000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A780000022uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334180000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333417FFFFFDDuLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333417FFFFFBAuLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333417FFFFF97uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333417FFFFDD0uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133334078A491D2uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334081333344uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333000000023uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333000000000uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331E80000069uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331E80000046uLL},
+{0xFFFFFFFD80000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331E80000023uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFDuLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFF0uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFE7879BB06uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE78B851ECuLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000003uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFD80000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFD80000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFD80000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFDuLL},
+{0xFFFFFFFD80000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFF0uLL},
+{0xFFFFFFFD80000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFD7879BB06uLL},
+{0xFFFFFFFD80000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFD78B851ECuLL},
+{0xFFFFFFFD80000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFD80000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFD80000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000003uLL},
+{0xFFFFFFFD80000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000002uLL},
+{0xFFFFFFFD80000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFC80000001uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFD80000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFD80000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000002uLL, 0x7FFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000003uLL, 0x55555554AAAAAAA9uLL, 0x0000000000000002uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000010uLL, 0x0FFFFFFFDFFFFFFFuLL, 0x000000000000000DuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0353uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11D9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFBuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000005uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000CuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x000000000000011DuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA892219uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C3211DuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAA6uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFAuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000001uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000003uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000000000004DuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B3uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF05uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666662uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000002FFFFFFF9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAA5uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555551uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAA9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000155555555uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000001uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAADDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624A7uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C416085uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000249249245uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFAuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000027FFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000023FFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000DFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DEFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DDFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D0000000DuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE08FuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA977DuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0F5uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D27uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E19uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F0BuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFDBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFB9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF97uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDDDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6C9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE155uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B90000001FuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B8FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000063uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000041uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A80000001FuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333341FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFDAuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFB7uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF94uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDCDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491CFuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333341uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000020uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333307FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F00000066uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000043uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000020uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFAuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFEDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB03uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851E9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFAuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFEDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB03uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851E9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000002uLL, 0x7FFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000003uLL, 0x55555554AAAAAAAAuLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000010uLL, 0x0FFFFFFFDFFFFFFFuLL, 0x000000000000000EuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0354uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11DAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFBuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000006uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000DuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x000000000000011EuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89221AuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C3211EuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAA7uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000002uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000004uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000000000004EuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B4uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF06uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666663uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000002FFFFFFFAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAA6uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555552uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAAAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000155555556uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000002uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAADEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624A8uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C416086uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000249249246uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000027FFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000023FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000DFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DEFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000001uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D0000000EuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE090uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA977EuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0F6uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D28uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E1AuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F0CuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFDCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFBAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF98uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDDEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6CAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE156uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000020uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B8FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000064uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000042uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000020uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333341FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFDBuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFB8uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF95uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDCEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491D0uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333342uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000021uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333307FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F00000067uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000044uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000021uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFEEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB04uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFEEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB04uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFCFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000002uLL, 0x7FFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000003uLL, 0x55555554AAAAAAAAuLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000010uLL, 0x0FFFFFFFDFFFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0355uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11DBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFBuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000002uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000007uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000EuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x000000000000011FuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89221BuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C3211FuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAA8uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000200000000uLL, 0x000000007FFFFFFEuLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000003uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000005uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000000000004FuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B5uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF07uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666664uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000002FFFFFFFBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAA7uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555553uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAABuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000155555557uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000003uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAADFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624A9uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C416087uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000249249247uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000027FFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000023FFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000DFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF0000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000002uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D0000000FuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE091uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA977FuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0F7uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D29uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E1BuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F0DuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFDDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFBBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF99uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDDFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6CBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE157uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000021uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B8FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000065uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000043uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000021uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333341FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFDCuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFB9uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF96uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDCFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491D1uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333343uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000022uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333307FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F00000068uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000045uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000022uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFEFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB05uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFEFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB05uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD7FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFDFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000000000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000000000003uLL, 0x55555554AAAAAAAAuLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000000000010uLL, 0x0FFFFFFFE0000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0356uLL},
+{0xFFFFFFFE00000000uLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11DCuLL},
+{0xFFFFFFFE00000000uLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFE00000000uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000008uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000000000000FuLL},
+{0xFFFFFFFE00000000uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x0000000000000120uLL},
+{0xFFFFFFFE00000000uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89221CuLL},
+{0xFFFFFFFE00000000uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C32120uLL},
+{0xFFFFFFFE00000000uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAA9uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000080000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFE00000000uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFE00000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE00000000uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000002uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000004uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000006uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000000000050uLL},
+{0xFFFFFFFE00000000uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B6uLL},
+{0xFFFFFFFE00000000uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF08uLL},
+{0xFFFFFFFE00000000uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666665uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000180000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555554uLL, 0x00000002FFFFFFFCuLL},
+{0xFFFFFFFE00000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAA8uLL},
+{0xFFFFFFFE00000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555554uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000200000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAACuLL},
+{0xFFFFFFFE00000000uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000155555558uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000004uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAAE0uLL},
+{0xFFFFFFFE00000000uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624AAuLL},
+{0xFFFFFFFE00000000uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C416088uLL},
+{0xFFFFFFFE00000000uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000249249248uLL},
+{0xFFFFFFFE00000000uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000200000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFDuLL},
+{0xFFFFFFFE00000000uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000027FFFFFFEuLL},
+{0xFFFFFFFE00000000uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000023FFFFFFFuLL},
+{0xFFFFFFFE00000000uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF0000001uLL},
+{0xFFFFFFFE00000000uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000002uLL},
+{0xFFFFFFFE00000000uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000003uLL},
+{0xFFFFFFFE00000000uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000010uLL},
+{0xFFFFFFFE00000000uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE092uLL},
+{0xFFFFFFFE00000000uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA9780uLL},
+{0xFFFFFFFE00000000uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0F8uLL},
+{0xFFFFFFFE00000000uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000200000000uLL},
+{0xFFFFFFFE00000000uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D2AuLL},
+{0xFFFFFFFE00000000uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E1CuLL},
+{0xFFFFFFFE00000000uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F0EuLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA00000000uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFDEuLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFBCuLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF9AuLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDE0uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6CCuLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE158uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000022uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B900000000uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000066uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000044uLL},
+{0xFFFFFFFE00000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000022uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334200000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFDDuLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFBAuLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF97uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDD0uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491D2uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333344uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000023uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333080000000uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F00000069uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000046uLL},
+{0xFFFFFFFE00000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000023uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF0uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB06uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851ECuLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFE00000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFE00000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFE00000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFE00000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFDuLL},
+{0xFFFFFFFE00000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF0uLL},
+{0xFFFFFFFE00000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB06uLL},
+{0xFFFFFFFE00000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851ECuLL},
+{0xFFFFFFFE00000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFE00000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000000uLL},
+{0xFFFFFFFE00000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFE00000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFE00000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000001uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF0uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB06uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851ECuLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000000uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000000000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000000000003uLL, 0x55555554AAAAAAABuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000000000010uLL, 0x0FFFFFFFE0000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0357uLL},
+{0xFFFFFFFE00000001uLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11DDuLL},
+{0xFFFFFFFE00000001uLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFE00000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000004uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000009uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x0000000000000121uLL},
+{0xFFFFFFFE00000001uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89221DuLL},
+{0xFFFFFFFE00000001uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C32121uLL},
+{0xFFFFFFFE00000001uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAAAuLL},
+{0xFFFFFFFE00000001uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000080000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFE00000001uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE00000001uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000003uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000005uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000007uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000000000051uLL},
+{0xFFFFFFFE00000001uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B7uLL},
+{0xFFFFFFFE00000001uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF09uLL},
+{0xFFFFFFFE00000001uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666666uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000180000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAA9uLL},
+{0xFFFFFFFE00000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555555uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000200000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAADuLL},
+{0xFFFFFFFE00000001uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000155555559uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000005uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAAE1uLL},
+{0xFFFFFFFE00000001uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624ABuLL},
+{0xFFFFFFFE00000001uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C416089uLL},
+{0xFFFFFFFE00000001uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000249249249uLL},
+{0xFFFFFFFE00000001uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000200000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFEuLL},
+{0xFFFFFFFE00000001uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFE00000001uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000240000000uLL},
+{0xFFFFFFFE00000001uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF0000002uLL},
+{0xFFFFFFFE00000001uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000003uLL},
+{0xFFFFFFFE00000001uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000004uLL},
+{0xFFFFFFFE00000001uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000011uLL},
+{0xFFFFFFFE00000001uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE093uLL},
+{0xFFFFFFFE00000001uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA9781uLL},
+{0xFFFFFFFE00000001uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0F9uLL},
+{0xFFFFFFFE00000001uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000200000001uLL},
+{0xFFFFFFFE00000001uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D2BuLL},
+{0xFFFFFFFE00000001uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E1DuLL},
+{0xFFFFFFFE00000001uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F0FuLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA00000001uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFDFuLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFBDuLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF9BuLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDE1uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6CDuLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE159uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000023uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B900000001uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000067uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000045uLL},
+{0xFFFFFFFE00000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000023uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334200000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFDEuLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFBBuLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF98uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDD1uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491D3uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333345uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000024uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333080000001uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F0000006AuLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000047uLL},
+{0xFFFFFFFE00000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000024uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF1uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB07uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EDuLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000004uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFE00000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFE00000001uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE00000001uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFE00000001uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFE00000001uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF1uLL},
+{0xFFFFFFFE00000001uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB07uLL},
+{0xFFFFFFFE00000001uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EDuLL},
+{0xFFFFFFFE00000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFE00000001uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFE00000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000004uLL},
+{0xFFFFFFFE00000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFE00000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000002uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF1uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB07uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EDuLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000001uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000000000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000000000003uLL, 0x55555554AAAAAAABuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000000000010uLL, 0x0FFFFFFFE0000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0358uLL},
+{0xFFFFFFFE00000002uLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11DEuLL},
+{0xFFFFFFFE00000002uLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000005uLL},
+{0xFFFFFFFE00000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000005uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000AuLL},
+{0xFFFFFFFE00000002uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x0000000000000011uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x0000000000000122uLL},
+{0xFFFFFFFE00000002uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89221EuLL},
+{0xFFFFFFFE00000002uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C32122uLL},
+{0xFFFFFFFE00000002uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAABuLL},
+{0xFFFFFFFE00000002uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000080000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFE00000002uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL},
+{0xFFFFFFFE00000002uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000004uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000006uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000008uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000000000052uLL},
+{0xFFFFFFFE00000002uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B8uLL},
+{0xFFFFFFFE00000002uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF0AuLL},
+{0xFFFFFFFE00000002uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666667uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000180000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAAAuLL},
+{0xFFFFFFFE00000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555556uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000200000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAAEuLL},
+{0xFFFFFFFE00000002uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000015555555AuLL},
+{0xFFFFFFFE00000002uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000006uLL},
+{0xFFFFFFFE00000002uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAAE2uLL},
+{0xFFFFFFFE00000002uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624ACuLL},
+{0xFFFFFFFE00000002uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C41608AuLL},
+{0xFFFFFFFE00000002uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x000000024924924AuLL},
+{0xFFFFFFFE00000002uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000200000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFFuLL},
+{0xFFFFFFFE00000002uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000280000000uLL},
+{0xFFFFFFFE00000002uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000240000001uLL},
+{0xFFFFFFFE00000002uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF0000003uLL},
+{0xFFFFFFFE00000002uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000004uLL},
+{0xFFFFFFFE00000002uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000005uLL},
+{0xFFFFFFFE00000002uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000012uLL},
+{0xFFFFFFFE00000002uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE094uLL},
+{0xFFFFFFFE00000002uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA9782uLL},
+{0xFFFFFFFE00000002uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0FAuLL},
+{0xFFFFFFFE00000002uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000200000002uLL},
+{0xFFFFFFFE00000002uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D2CuLL},
+{0xFFFFFFFE00000002uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E1EuLL},
+{0xFFFFFFFE00000002uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F10uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA00000002uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFE0uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFBEuLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF9CuLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDE2uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6CEuLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE15AuLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000024uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B900000002uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000068uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000046uLL},
+{0xFFFFFFFE00000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000024uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334200000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFDFuLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFBCuLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF99uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDD2uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491D4uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333346uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000025uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333080000002uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F0000006BuLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000048uLL},
+{0xFFFFFFFE00000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000025uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF2uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB08uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EEuLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000003uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000005uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000004uLL},
+{0xFFFFFFFE00000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFE00000002uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFE00000002uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE00000002uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFE00000002uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF2uLL},
+{0xFFFFFFFE00000002uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB08uLL},
+{0xFFFFFFFE00000002uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EEuLL},
+{0xFFFFFFFE00000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000003uLL},
+{0xFFFFFFFE00000002uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFE00000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000005uLL},
+{0xFFFFFFFE00000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000004uLL},
+{0xFFFFFFFE00000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000003uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF2uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB08uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EEuLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000002uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000000000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000000000003uLL, 0x55555554AAAAAAABuLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000000000010uLL, 0x0FFFFFFFE0000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0359uLL},
+{0xFFFFFFFE00000003uLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11DFuLL},
+{0xFFFFFFFE00000003uLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000006uLL},
+{0xFFFFFFFE00000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000006uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000BuLL},
+{0xFFFFFFFE00000003uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x0000000000000012uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x0000000000000123uLL},
+{0xFFFFFFFE00000003uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89221FuLL},
+{0xFFFFFFFE00000003uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C32123uLL},
+{0xFFFFFFFE00000003uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAACuLL},
+{0xFFFFFFFE00000003uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000080000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000180000000uLL},
+{0xFFFFFFFE00000003uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL},
+{0xFFFFFFFE00000003uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000005uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000007uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000009uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000000000053uLL},
+{0xFFFFFFFE00000003uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4B9uLL},
+{0xFFFFFFFE00000003uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF0BuLL},
+{0xFFFFFFFE00000003uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666668uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000180000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAABuLL},
+{0xFFFFFFFE00000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555557uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000200000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAAAFuLL},
+{0xFFFFFFFE00000003uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000015555555BuLL},
+{0xFFFFFFFE00000003uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000007uLL},
+{0xFFFFFFFE00000003uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAAE3uLL},
+{0xFFFFFFFE00000003uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624ADuLL},
+{0xFFFFFFFE00000003uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C41608BuLL},
+{0xFFFFFFFE00000003uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x000000024924924BuLL},
+{0xFFFFFFFE00000003uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000200000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002C0000000uLL},
+{0xFFFFFFFE00000003uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000280000001uLL},
+{0xFFFFFFFE00000003uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000240000002uLL},
+{0xFFFFFFFE00000003uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF0000004uLL},
+{0xFFFFFFFE00000003uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000005uLL},
+{0xFFFFFFFE00000003uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000006uLL},
+{0xFFFFFFFE00000003uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000013uLL},
+{0xFFFFFFFE00000003uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE095uLL},
+{0xFFFFFFFE00000003uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA9783uLL},
+{0xFFFFFFFE00000003uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E0FBuLL},
+{0xFFFFFFFE00000003uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000200000003uLL},
+{0xFFFFFFFE00000003uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D2DuLL},
+{0xFFFFFFFE00000003uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E1FuLL},
+{0xFFFFFFFE00000003uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F11uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA00000003uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFE1uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFBFuLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFF9DuLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDE3uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6CFuLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE15BuLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000025uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B900000003uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000069uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000047uLL},
+{0xFFFFFFFE00000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000025uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334200000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFE0uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFBDuLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFF9AuLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDD3uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491D5uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333347uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000026uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333080000003uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F0000006CuLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000049uLL},
+{0xFFFFFFFE00000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000026uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF3uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB09uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EFuLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000004uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000003uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000006uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000005uLL},
+{0xFFFFFFFE00000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000004uLL},
+{0xFFFFFFFE00000003uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFE00000003uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFE00000003uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE00000003uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFF3uLL},
+{0xFFFFFFFE00000003uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB09uLL},
+{0xFFFFFFFE00000003uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851EFuLL},
+{0xFFFFFFFE00000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000004uLL},
+{0xFFFFFFFE00000003uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000003uLL},
+{0xFFFFFFFE00000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000006uLL},
+{0xFFFFFFFE00000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000005uLL},
+{0xFFFFFFFE00000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000004uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF3uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB09uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EFuLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000004uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000006uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000003uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000000000002uLL, 0x7FFFFFFF00000008uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000000000003uLL, 0x55555554AAAAAAB0uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000000000010uLL, 0x0FFFFFFFE0000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000010uLL, 0x00000000078644FAuLL, 0x0000002205B17AB9uLL, 0x00000000003F0366uLL},
+{0xFFFFFFFE00000010uLL, 0x000000000747AE14uLL, 0x000000232A32A535uLL, 0x00000000030E11ECuLL},
+{0xFFFFFFFE00000010uLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000000000013uLL},
+{0xFFFFFFFE00000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFE00000010uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000013uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000018uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000000000001FuLL},
+{0xFFFFFFFE00000010uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x0000000000000130uLL},
+{0xFFFFFFFE00000010uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000AA89222CuLL},
+{0xFFFFFFFE00000010uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x0000000048C32130uLL},
+{0xFFFFFFFE00000010uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000012AAAAAB9uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000080000010uLL},
+{0xFFFFFFFE00000010uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000018000000DuLL},
+{0xFFFFFFFE00000010uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000010000000EuLL},
+{0xFFFFFFFE00000010uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000008000000FuLL},
+{0xFFFFFFFE00000010uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x0000000180000012uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000100000014uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000080000016uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000000000060uLL},
+{0xFFFFFFFE00000010uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000004A8EC4C6uLL},
+{0xFFFFFFFE00000010uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006560EF18uLL},
+{0xFFFFFFFE00000010uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001E6666675uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000180000010uLL},
+{0xFFFFFFFE00000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000000000000FuLL},
+{0xFFFFFFFE00000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002AAAAAAB8uLL},
+{0xFFFFFFFE00000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x0000000255555564uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000200000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001AAAAAABCuLL},
+{0xFFFFFFFE00000010uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000155555568uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000100000014uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002AAAAAAF0uLL},
+{0xFFFFFFFE00000010uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x000000023FA624BAuLL},
+{0xFFFFFFFE00000010uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000000C416098uLL},
+{0xFFFFFFFE00000010uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000249249258uLL},
+{0xFFFFFFFE00000010uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000200000010uLL},
+{0xFFFFFFFE00000010uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002C000000DuLL},
+{0xFFFFFFFE00000010uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000028000000EuLL},
+{0xFFFFFFFE00000010uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000024000000FuLL},
+{0xFFFFFFFE00000010uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF0000011uLL},
+{0xFFFFFFFE00000010uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE0000012uLL},
+{0xFFFFFFFE00000010uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD0000013uLL},
+{0xFFFFFFFE00000010uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D00000020uLL},
+{0xFFFFFFFE00000010uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000001FFFDE0A2uLL},
+{0xFFFFFFFE00000010uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000447AA9790uLL},
+{0xFFFFFFFE00000010uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000020F83E108uLL},
+{0xFFFFFFFE00000010uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000200000010uLL},
+{0xFFFFFFFE00000010uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000102D2D2D3AuLL},
+{0xFFFFFFFE00000010uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000101E1E1E2CuLL},
+{0xFFFFFFFE00000010uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000100F0F0F1EuLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA00000010uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFEEuLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFCCuLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFFAAuLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6C9FFFFFDF0uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9002AD6DCuLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9087AE168uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B900000032uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B900000010uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A800000076uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A800000054uLL},
+{0xFFFFFFFE00000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A800000032uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334200000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333341FFFFFFEDuLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333341FFFFFFCAuLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333341FFFFFFA7uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333341FFFFFDE0uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340F8A491E2uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334101333354uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333080000033uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333080000010uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F00000079uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F00000056uLL},
+{0xFFFFFFFE00000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F00000033uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000000000000EuLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000000000000CuLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000000000000AuLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB16uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851FCuLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000011uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000010uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000013uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000012uLL},
+{0xFFFFFFFE00000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000011uLL},
+{0xFFFFFFFE00000010uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE0000000FuLL},
+{0xFFFFFFFE00000010uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE0000000EuLL},
+{0xFFFFFFFE00000010uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE0000000DuLL},
+{0xFFFFFFFE00000010uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE00000010uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDF879BB16uLL},
+{0xFFFFFFFE00000010uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFDF8B851FCuLL},
+{0xFFFFFFFE00000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000011uLL},
+{0xFFFFFFFE00000010uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD80000010uLL},
+{0xFFFFFFFE00000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000013uLL},
+{0xFFFFFFFE00000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000012uLL},
+{0xFFFFFFFE00000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD00000011uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000100000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000010000000FuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000010000000EuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000010000000DuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB16uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851FCuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000011uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000080000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000013uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000012uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000011uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE00000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE00000010uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000000000002uLL, 0x7FFFFFFF03C3227DuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000000000003uLL, 0x55555554AD2CC1A8uLL, 0x0000000000000002uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000000000010uLL, 0x0FFFFFFFE078644FuLL, 0x000000000000000AuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000000078644FAuLL, 0x0000002205B17ABAuLL, 0x00000000003F0356uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000000747AE14uLL, 0x000000232A32A536uLL, 0x00000000034CA8C2uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x00000000078644FDuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000078644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x00000000078644FDuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000007864502uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x0000000007864509uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x000000000786461AuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000B20F6716uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x000000005049661AuLL},
+{0xFFFFFFFE078644FAuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x000000013230EFA3uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x00000000878644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x00000001878644F7uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000001078644F8uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000000878644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x00000001878644FCuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x00000001078644FEuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000087864500uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000000786454AuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x00000000521509B0uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006CE73402uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001EDECAB5FuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x00000001878644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000000078644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002B230EFA2uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x000000025CDB9A4EuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000002078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001B230EFA6uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000015CDB9A52uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x00000001078644FEuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002B230EFDAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x00000002472C69A4uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x0000000013C7A582uLL},
+{0xFFFFFFFE078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000250AAD742uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000002078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002C78644F7uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000002878644F8uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000002478644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF78644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE78644FCuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD78644FDuLL},
+{0xFFFFFFFE078644FAuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D0786450AuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000020784258CuLL},
+{0xFFFFFFFE078644FAuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x000000044F30DC7AuLL},
+{0xFFFFFFFE078644FAuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x00000002170A25F2uLL},
+{0xFFFFFFFE078644FAuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000002078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x0000001034B37224uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x0000001025A46316uLL},
+{0xFFFFFFFE078644FAuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x0000001016955408uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CA078644D8uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CA078644B6uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CA07864494uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CA078642DAuLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C907B11BC6uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C910012652uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B90786451CuLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B9078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A807864560uLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A80786453EuLL},
+{0xFFFFFFFE078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A80786451CuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333342078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342078644D7uLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342078644B4uLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x0133334207864491uLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342078642CAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341002AD6CCuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334108B9783EuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x013333308786451DuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x01333330878644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F07864563uLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F07864540uLL},
+{0xFFFFFFFE078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F0786451DuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000000078644F8uLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000078644F6uLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000078644F4uLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000078644DAuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF003E96E6uLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE878644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE878644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FDuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FCuLL},
+{0xFFFFFFFE078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644F8uLL},
+{0xFFFFFFFE078644FAuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644F7uLL},
+{0xFFFFFFFE078644FAuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE078644EAuLL},
+{0xFFFFFFFE078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE003E96E6uLL},
+{0xFFFFFFFE078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD878644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD878644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FDuLL},
+{0xFFFFFFFE078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FCuLL},
+{0xFFFFFFFE078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD078644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000001078644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000001078644F8uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001078644F7uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001078644EAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001003E96E6uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x00000000878644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x00000000878644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000078644FDuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000078644FCuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000078644FBuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE078644FAuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000000000002uLL, 0x7FFFFFFF03A3D70AuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000000000003uLL, 0x55555554AD17E4B1uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000000000010uLL, 0x0FFFFFFFE0747AE1uLL, 0x0000000000000004uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000000078644FAuLL, 0x0000002205B17ABAuLL, 0x0000000000006C70uLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000000747AE14uLL, 0x000000232A32A536uLL, 0x00000000030E11DCuLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000200000000uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x000000000747AE17uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE17uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x000000000747AE1CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000000747AE23uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x000000000747AF34uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5AuLL, 0x00000000B1D0D030uLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x00000000500ACF34uLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAA9uLL, 0x0000000131F258BDuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000008747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x000000018747AE11uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000010747AE12uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000008747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL, 0x000000018747AE16uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x000000010747AE18uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x000000008747AE1AuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000000747AE64uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x0000000051D672CAuLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000006CA89D1CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x00000001EDAE1479uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000018747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000000747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555554uLL, 0x00000002B1F258BCuLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x000000025C9D0368uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x000000020747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000001B1F258C0uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000015C9D036CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x000000010747AE18uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000300000010uLL, 0x0000000055555552uLL, 0x00000002B1F258F4uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x0000000246EDD2BEuLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x0000000013890E9CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000002506C405CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x000000020747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000002C747AE11uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000028747AE12uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000024747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000DF747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000DE747AE16uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000DD747AE17uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D0747AE24uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x0000000207458EA6uLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x000000044EF24594uLL},
+{0xFFFFFFFE0747AE14uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x0000000216CB8F0CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x000000020747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x000000103474DB3EuLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000102565CC30uLL},
+{0xFFFFFFFE0747AE14uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000101656BD22uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CA0747ADF2uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CA0747ADD0uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CA0747ADAEuLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CA0747ABF4uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9077284E0uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C90FC28F6CuLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B90747AE36uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B90747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A80747AE7AuLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A80747AE58uLL},
+{0xFFFFFFFE0747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A80747AE36uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x013333420747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333420747ADF1uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333420747ADCEuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333420747ADABuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333420747ABE4uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333340FFEC3FE6uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x01333341087AE158uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x013333308747AE37uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333308747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F0747AE7DuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F0747AE5AuLL},
+{0xFFFFFFFE0747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F0747AE37uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000000747AE12uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000000747AE10uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000000747AE0EuLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x000000000747ADF4uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFC1691AuLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE8747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE8747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE17uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE16uLL},
+{0xFFFFFFFE0747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE12uLL},
+{0xFFFFFFFE0747AE14uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE11uLL},
+{0xFFFFFFFE0747AE14uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE04uLL},
+{0xFFFFFFFE0747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFC1691AuLL},
+{0xFFFFFFFE0747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE0747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD8747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFD8747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE17uLL},
+{0xFFFFFFFE0747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE16uLL},
+{0xFFFFFFFE0747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD0747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000010747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000010747AE12uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000010747AE11uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000010747AE04uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000000FFC1691AuLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000008747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000008747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x000000000747AE17uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x000000000747AE16uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x000000000747AE15uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE0747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE0747AE14uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000002uLL, 0x7FFFFFFF3FFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000003uLL, 0x55555554D5555555uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000010uLL, 0x0FFFFFFFE7FFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000002205B17ACAuLL, 0x0000000000546EBBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000000747AE14uLL, 0x000000232A32A547uLL, 0x000000000003D473uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFCuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000002uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000080000007uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000008000000EuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x000000008000011FuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x000000002302DD21uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x00000000C8C3211FuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x000000002AAAAAA9uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000180000003uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000100000005uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000008000004FuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x00000000CA8EC4B5uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x00000000E560EF07uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x0000000266666664uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x000000002AAAAAA9uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x00000002D5555553uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x000000022AAAAAABuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x00000001D5555557uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000180000003uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x000000002AAAAACFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x00000002BFA624A9uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000008C416087uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000002C9249247uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x000000033FFFFFFCuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000E70000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000E60000001uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000E50000002uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D8000000FuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000027FFDE091uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x00000004C7AA977FuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000028F83E0F7uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x00000010AD2D2D29uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000109E1E1E1BuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000108F0F0F0DuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFFDDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFFBBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFF99uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFDDFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9802AD6CBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9887AE157uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B980000021uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B97FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A880000065uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A880000043uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A880000021uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x013333427FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333427FFFFFDCuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333427FFFFFB9uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333427FFFFF96uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333427FFFFDCFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133334178A491D1uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334181333343uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333100000022uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x01333330FFFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F80000068uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F80000045uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F80000022uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000007FFFFFFBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000007FFFFFF9uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x000000007FFFFFDFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x0000000070F3760BuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x000000007170A3D7uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFCuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFEFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFE7879BB05uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE78B851EBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFCuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFEFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB05uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851EBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000000000002uLL, 0x7FFFFFFF40000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000000000003uLL, 0x55555554D5555555uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000000000010uLL, 0x0FFFFFFFE8000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000000078644FAuLL, 0x0000002205B17ACAuLL, 0x0000000000546EBCuLL},
+{0xFFFFFFFE80000000uLL, 0x000000000747AE14uLL, 0x000000232A32A547uLL, 0x000000000003D474uLL},
+{0xFFFFFFFE80000000uLL, 0x000000007FFFFFFFuLL, 0x0000000200000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000000000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFE80000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x0000000080000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000003uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFCuLL, 0x0000000080000008uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFBuLL, 0x000000008000000FuLL},
+{0xFFFFFFFE80000000uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEEuLL, 0x0000000080000120uLL},
+{0xFFFFFFFE80000000uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x000000002302DD22uLL},
+{0xFFFFFFFE80000000uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA58uLL, 0x00000000C8C32120uLL},
+{0xFFFFFFFE80000000uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x000000002AAAAAAAuLL},
+{0xFFFFFFFE80000000uLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFE80000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000180000004uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000100000006uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000080000050uLL},
+{0xFFFFFFFE80000000uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x00000000CA8EC4B6uLL},
+{0xFFFFFFFE80000000uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x00000000E560EF08uLL},
+{0xFFFFFFFE80000000uLL, 0x000000027FFFFFFFuLL, 0x0000000066666665uLL, 0x0000000266666665uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x0000000200000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x000000002AAAAAAAuLL},
+{0xFFFFFFFE80000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555554uLL, 0x00000002D5555554uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x0000000280000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x000000022AAAAAACuLL},
+{0xFFFFFFFE80000000uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x00000001D5555558uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000180000004uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x000000002AAAAAD0uLL},
+{0xFFFFFFFE80000000uLL, 0x00000003078644FAuLL, 0x0000000054816147uLL, 0x00000002BFA624AAuLL},
+{0xFFFFFFFE80000000uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000008C416088uLL},
+{0xFFFFFFFE80000000uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000002C9249248uLL},
+{0xFFFFFFFE80000000uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000280000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x000000033FFFFFFDuLL},
+{0xFFFFFFFE80000000uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000002FFFFFFFEuLL},
+{0xFFFFFFFE80000000uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000002BFFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000E80000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000E70000001uLL},
+{0xFFFFFFFE80000000uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000E60000002uLL},
+{0xFFFFFFFE80000000uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000E50000003uLL},
+{0xFFFFFFFE80000000uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000D80000010uLL},
+{0xFFFFFFFE80000000uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000027FFDE092uLL},
+{0xFFFFFFFE80000000uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x00000004C7AA9780uLL},
+{0xFFFFFFFE80000000uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000028F83E0F8uLL},
+{0xFFFFFFFE80000000uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000280000000uLL},
+{0xFFFFFFFE80000000uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0EuLL, 0x00000010AD2D2D2AuLL},
+{0xFFFFFFFE80000000uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0EuLL, 0x000000109E1E1E1CuLL},
+{0xFFFFFFFE80000000uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0EuLL, 0x000000108F0F0F0EuLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CA80000000uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFFDEuLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFFBCuLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFF9AuLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CA7FFFFDE0uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6C9802AD6CCuLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6C9887AE158uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6B980000022uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B980000000uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A880000066uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A880000044uLL},
+{0xFFFFFFFE80000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A880000022uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334280000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333427FFFFFDDuLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333427FFFFFBAuLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333427FFFFF97uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333427FFFFDD0uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133334178A491D2uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334181333344uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333100000023uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333100000000uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133331F80000069uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133331F80000046uLL},
+{0xFFFFFFFE80000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133331F80000023uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000080000000uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000007FFFFFFCuLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000007FFFFFFAuLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x000000007FFFFFE0uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x0000000070F3760CuLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x000000007170A3D8uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000003uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFE80000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFE80000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFE80000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFDuLL},
+{0xFFFFFFFE80000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFF0uLL},
+{0xFFFFFFFE80000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFE7879BB06uLL},
+{0xFFFFFFFE80000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFE78B851ECuLL},
+{0xFFFFFFFE80000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFE80000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFE80000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000003uLL},
+{0xFFFFFFFE80000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000002uLL},
+{0xFFFFFFFE80000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFD80000001uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFF0uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB06uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851ECuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFE80000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFE80000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000002uLL, 0x7FFFFFFF7FFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000003uLL, 0x55555554FFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000010uLL, 0x0FFFFFFFEFFFFFFFuLL, 0x000000000000000DuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA1FuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x000000000441451DuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000003uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x0000000000000009uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x000000000000010DuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD1FuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B7309uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAA7uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000200000002uLL, 0x000000007FFFFFFEuLL, 0x0000000200000001uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000003uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000010000004DuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B3uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF05uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666663uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000027FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAA7uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555552uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAA9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000255555555uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000001uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAACDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFADuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C416085uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000349249245uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFAuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000037FFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000033FFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000EFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EEFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EDFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E0000000DuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE08FuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA977DuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0F5uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D2AuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E1BuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F0CuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFDBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFB9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF97uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDDDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6C9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE155uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA0000001FuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B9FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000063uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000041uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A90000001FuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333342FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFDAuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFB7uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF94uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDCDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491CFuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333341uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000020uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333317FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332000000066uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000043uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000020uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF7uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFDDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F37609uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D5uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFAuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFEDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB03uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851E9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFAuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB03uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851E9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000003uLL, 0x55555554FFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000010uLL, 0x0FFFFFFFEFFFFFFFuLL, 0x000000000000000EuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA20uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x000000000441451EuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000004uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000004uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000AuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x000000000000010EuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD20uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B730AuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAA8uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000004uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000010000004EuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B4uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF06uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666664uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000027FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAA8uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555553uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000002FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAAAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000255555556uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000002uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAACEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFAEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C416086uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000349249246uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000002FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000037FFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000033FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000EFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EEFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000001uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E0000000EuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE090uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA977EuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0F6uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000002FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D2BuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E1CuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F0DuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFDCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFBAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF98uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDDEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6CAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE156uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000020uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B9FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000064uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000042uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000020uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333342FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFDBuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFB8uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF95uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDCEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491D0uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333342uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000021uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333317FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332000000067uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000044uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000021uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF8uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFDEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760AuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D6uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFEEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB04uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFDFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB04uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000003uLL, 0x55555554FFFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000010uLL, 0x0FFFFFFFEFFFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA21uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x000000000441451FuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFDuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000005uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000005uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000BuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x000000000000010FuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD21uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B730BuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAA9uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000180000000uLL, 0x00000000AAAAAAA9uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000005uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000010000004FuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B5uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF07uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666665uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000066666665uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAA9uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555554uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000055555554uLL, 0x00000002FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAABuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000255555557uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000003uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAACFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFAFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C416087uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000349249247uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000002FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000037FFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000033FFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000EFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF0000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000002uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E0000000FuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE091uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA977FuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0F7uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000002FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D2CuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E1DuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F0EuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFDDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFBBuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF99uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDDFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6CBuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE157uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000021uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6B9FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000065uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000043uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000021uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333342FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFDCuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFB9uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF96uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDCFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491D1uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333343uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000022uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333317FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332000000068uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000045uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000022uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF9uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFDFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760BuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D7uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFEFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB05uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EBuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE7FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB05uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EBuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFEFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000000000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000000000003uLL, 0x5555555500000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000000000010uLL, 0x0FFFFFFFF0000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA22uLL},
+{0xFFFFFFFF00000000uLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x0000000004414520uLL},
+{0xFFFFFFFF00000000uLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000006uLL},
+{0xFFFFFFFF00000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000006uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000CuLL},
+{0xFFFFFFFF00000000uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x0000000000000110uLL},
+{0xFFFFFFFF00000000uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD22uLL},
+{0xFFFFFFFF00000000uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B730CuLL},
+{0xFFFFFFFF00000000uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAAAuLL},
+{0xFFFFFFFF00000000uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000006uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000100000050uLL},
+{0xFFFFFFFF00000000uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B6uLL},
+{0xFFFFFFFF00000000uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF08uLL},
+{0xFFFFFFFF00000000uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666666uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAAAuLL},
+{0xFFFFFFFF00000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555555uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAACuLL},
+{0xFFFFFFFF00000000uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000255555558uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000004uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAAD0uLL},
+{0xFFFFFFFF00000000uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFB0uLL},
+{0xFFFFFFFF00000000uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C416088uLL},
+{0xFFFFFFFF00000000uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000349249248uLL},
+{0xFFFFFFFF00000000uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000300000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFDuLL},
+{0xFFFFFFFF00000000uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000037FFFFFFEuLL},
+{0xFFFFFFFF00000000uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000033FFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F00000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF0000001uLL},
+{0xFFFFFFFF00000000uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000002uLL},
+{0xFFFFFFFF00000000uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000003uLL},
+{0xFFFFFFFF00000000uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000010uLL},
+{0xFFFFFFFF00000000uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE092uLL},
+{0xFFFFFFFF00000000uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA9780uLL},
+{0xFFFFFFFF00000000uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0F8uLL},
+{0xFFFFFFFF00000000uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000300000000uLL},
+{0xFFFFFFFF00000000uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D2DuLL},
+{0xFFFFFFFF00000000uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E1EuLL},
+{0xFFFFFFFF00000000uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F0FuLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB00000000uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFDEuLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFBCuLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF9AuLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDE0uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6CCuLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE158uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000022uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA00000000uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000066uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000044uLL},
+{0xFFFFFFFF00000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000022uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334300000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFDDuLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFBAuLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF97uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDD0uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491D2uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333344uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000023uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333180000000uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332000000069uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000046uLL},
+{0xFFFFFFFF00000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000023uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFAuLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE0uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760CuLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D8uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000003uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL},
+{0xFFFFFFFF00000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFF00000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFF00000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFDuLL},
+{0xFFFFFFFF00000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF0uLL},
+{0xFFFFFFFF00000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB06uLL},
+{0xFFFFFFFF00000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851ECuLL},
+{0xFFFFFFFF00000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFF00000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFF00000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFF00000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFF00000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000001uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFF0uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB06uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851ECuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000001uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF0uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB06uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851ECuLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000000uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000000000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000000000003uLL, 0x5555555500000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000000000010uLL, 0x0FFFFFFFF0000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA23uLL},
+{0xFFFFFFFF00000001uLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x0000000004414521uLL},
+{0xFFFFFFFF00000001uLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000007uLL},
+{0xFFFFFFFF00000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000007uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000DuLL},
+{0xFFFFFFFF00000001uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x0000000000000111uLL},
+{0xFFFFFFFF00000001uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD23uLL},
+{0xFFFFFFFF00000001uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B730DuLL},
+{0xFFFFFFFF00000001uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAABuLL},
+{0xFFFFFFFF00000001uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000180000000uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000007uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000100000051uLL},
+{0xFFFFFFFF00000001uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B7uLL},
+{0xFFFFFFFF00000001uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF09uLL},
+{0xFFFFFFFF00000001uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666667uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000001uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAABuLL},
+{0xFFFFFFFF00000001uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555556uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAADuLL},
+{0xFFFFFFFF00000001uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000255555559uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000005uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAAD1uLL},
+{0xFFFFFFFF00000001uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFB1uLL},
+{0xFFFFFFFF00000001uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C416089uLL},
+{0xFFFFFFFF00000001uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000349249249uLL},
+{0xFFFFFFFF00000001uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000300000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFEuLL},
+{0xFFFFFFFF00000001uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000037FFFFFFFuLL},
+{0xFFFFFFFF00000001uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000340000000uLL},
+{0xFFFFFFFF00000001uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F00000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF0000002uLL},
+{0xFFFFFFFF00000001uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000003uLL},
+{0xFFFFFFFF00000001uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000004uLL},
+{0xFFFFFFFF00000001uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000011uLL},
+{0xFFFFFFFF00000001uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE093uLL},
+{0xFFFFFFFF00000001uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA9781uLL},
+{0xFFFFFFFF00000001uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0F9uLL},
+{0xFFFFFFFF00000001uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000300000001uLL},
+{0xFFFFFFFF00000001uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D2EuLL},
+{0xFFFFFFFF00000001uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E1FuLL},
+{0xFFFFFFFF00000001uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F10uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB00000001uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFDFuLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFBDuLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF9BuLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDE1uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6CDuLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE159uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000023uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA00000001uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000067uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000045uLL},
+{0xFFFFFFFF00000001uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000023uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334300000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFDEuLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFBBuLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF98uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDD1uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491D3uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333345uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000024uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333180000001uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x013333200000006AuLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000047uLL},
+{0xFFFFFFFF00000001uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000024uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE1uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760DuLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3D9uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000004uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000003uLL},
+{0xFFFFFFFF00000001uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL},
+{0xFFFFFFFF00000001uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF00000001uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFF00000001uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFF00000001uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF1uLL},
+{0xFFFFFFFF00000001uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB07uLL},
+{0xFFFFFFFF00000001uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EDuLL},
+{0xFFFFFFFF00000001uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFF00000001uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFF00000001uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000004uLL},
+{0xFFFFFFFF00000001uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFF00000001uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000002uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000200000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFF1uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB07uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EDuLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000002uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000180000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000004uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF1uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB07uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EDuLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000001uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000000000002uLL, 0x7FFFFFFF80000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000000000003uLL, 0x5555555500000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000000000010uLL, 0x0FFFFFFFF0000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA24uLL},
+{0xFFFFFFFF00000002uLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x0000000004414522uLL},
+{0xFFFFFFFF00000002uLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000008uLL},
+{0xFFFFFFFF00000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000002uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000008uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000EuLL},
+{0xFFFFFFFF00000002uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x0000000000000112uLL},
+{0xFFFFFFFF00000002uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD24uLL},
+{0xFFFFFFFF00000002uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B730EuLL},
+{0xFFFFFFFF00000002uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAACuLL},
+{0xFFFFFFFF00000002uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000180000001uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000003uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000008uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000100000052uLL},
+{0xFFFFFFFF00000002uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B8uLL},
+{0xFFFFFFFF00000002uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF0AuLL},
+{0xFFFFFFFF00000002uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666668uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000002uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAACuLL},
+{0xFFFFFFFF00000002uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555557uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAAEuLL},
+{0xFFFFFFFF00000002uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000025555555AuLL},
+{0xFFFFFFFF00000002uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000006uLL},
+{0xFFFFFFFF00000002uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAAD2uLL},
+{0xFFFFFFFF00000002uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFB2uLL},
+{0xFFFFFFFF00000002uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C41608AuLL},
+{0xFFFFFFFF00000002uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x000000034924924AuLL},
+{0xFFFFFFFF00000002uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000300000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFFuLL},
+{0xFFFFFFFF00000002uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000380000000uLL},
+{0xFFFFFFFF00000002uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000340000001uLL},
+{0xFFFFFFFF00000002uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F00000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF0000003uLL},
+{0xFFFFFFFF00000002uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000004uLL},
+{0xFFFFFFFF00000002uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000005uLL},
+{0xFFFFFFFF00000002uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000012uLL},
+{0xFFFFFFFF00000002uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE094uLL},
+{0xFFFFFFFF00000002uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA9782uLL},
+{0xFFFFFFFF00000002uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0FAuLL},
+{0xFFFFFFFF00000002uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000300000002uLL},
+{0xFFFFFFFF00000002uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D2FuLL},
+{0xFFFFFFFF00000002uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E20uLL},
+{0xFFFFFFFF00000002uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F11uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB00000002uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFE0uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFBEuLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF9CuLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDE2uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6CEuLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE15AuLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000024uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA00000002uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000068uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000046uLL},
+{0xFFFFFFFF00000002uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000024uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334300000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFDFuLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFBCuLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF99uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDD2uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491D4uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333346uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000025uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333180000002uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x013333200000006BuLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000048uLL},
+{0xFFFFFFFF00000002uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000025uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE2uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760EuLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3DAuLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000005uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000004uLL},
+{0xFFFFFFFF00000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000003uLL},
+{0xFFFFFFFF00000002uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFF00000002uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF00000002uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFF00000002uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF2uLL},
+{0xFFFFFFFF00000002uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB08uLL},
+{0xFFFFFFFF00000002uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EEuLL},
+{0xFFFFFFFF00000002uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000003uLL},
+{0xFFFFFFFF00000002uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFF00000002uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000005uLL},
+{0xFFFFFFFF00000002uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000004uLL},
+{0xFFFFFFFF00000002uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000003uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000200000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000200000001uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFF2uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB08uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EEuLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000003uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000180000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000005uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000004uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF2uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB08uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EEuLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000002uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000002uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000000000002uLL, 0x7FFFFFFF80000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000000000003uLL, 0x5555555500000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000000000010uLL, 0x0FFFFFFFF0000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA25uLL},
+{0xFFFFFFFF00000003uLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x0000000004414523uLL},
+{0xFFFFFFFF00000003uLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000009uLL},
+{0xFFFFFFFF00000003uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000003uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000009uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000000FuLL},
+{0xFFFFFFFF00000003uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x0000000000000113uLL},
+{0xFFFFFFFF00000003uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD25uLL},
+{0xFFFFFFFF00000003uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B730FuLL},
+{0xFFFFFFFF00000003uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAAADuLL},
+{0xFFFFFFFF00000003uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000180000002uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000004uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000009uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000100000053uLL},
+{0xFFFFFFFF00000003uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4B9uLL},
+{0xFFFFFFFF00000003uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF0BuLL},
+{0xFFFFFFFF00000003uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666669uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000003uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAAADuLL},
+{0xFFFFFFFF00000003uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555558uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAAAFuLL},
+{0xFFFFFFFF00000003uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000025555555BuLL},
+{0xFFFFFFFF00000003uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000007uLL},
+{0xFFFFFFFF00000003uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAAD3uLL},
+{0xFFFFFFFF00000003uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFB3uLL},
+{0xFFFFFFFF00000003uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C41608BuLL},
+{0xFFFFFFFF00000003uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x000000034924924BuLL},
+{0xFFFFFFFF00000003uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000300000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003C0000000uLL},
+{0xFFFFFFFF00000003uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x0000000380000001uLL},
+{0xFFFFFFFF00000003uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x0000000340000002uLL},
+{0xFFFFFFFF00000003uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F00000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF0000004uLL},
+{0xFFFFFFFF00000003uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000005uLL},
+{0xFFFFFFFF00000003uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000006uLL},
+{0xFFFFFFFF00000003uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000013uLL},
+{0xFFFFFFFF00000003uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE095uLL},
+{0xFFFFFFFF00000003uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA9783uLL},
+{0xFFFFFFFF00000003uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E0FBuLL},
+{0xFFFFFFFF00000003uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000300000003uLL},
+{0xFFFFFFFF00000003uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D30uLL},
+{0xFFFFFFFF00000003uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E21uLL},
+{0xFFFFFFFF00000003uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F12uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB00000003uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFE1uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFBFuLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFF9DuLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDE3uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6CFuLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE15BuLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000025uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA00000003uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000069uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000047uLL},
+{0xFFFFFFFF00000003uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000025uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334300000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFE0uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFBDuLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFF9AuLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDD3uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491D5uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333347uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000026uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333180000003uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x013333200000006CuLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000049uLL},
+{0xFFFFFFFF00000003uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000026uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000100000003uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFE3uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3760FuLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3DBuLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000006uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000005uLL},
+{0xFFFFFFFF00000003uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000004uLL},
+{0xFFFFFFFF00000003uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL},
+{0xFFFFFFFF00000003uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFF00000003uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF00000003uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFF3uLL},
+{0xFFFFFFFF00000003uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB09uLL},
+{0xFFFFFFFF00000003uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851EFuLL},
+{0xFFFFFFFF00000003uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000004uLL},
+{0xFFFFFFFF00000003uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000003uLL},
+{0xFFFFFFFF00000003uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000006uLL},
+{0xFFFFFFFF00000003uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000005uLL},
+{0xFFFFFFFF00000003uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000004uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000200000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x0000000200000002uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x0000000200000001uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFF3uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB09uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EFuLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000004uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000180000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000006uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000005uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000004uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000100000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFF3uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB09uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EFuLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000004uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000006uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000005uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000003uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000003uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000000000002uLL, 0x7FFFFFFF80000008uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000000000003uLL, 0x5555555500000005uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000000000010uLL, 0x0FFFFFFFF0000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000010uLL, 0x00000000078644FAuLL, 0x0000002205B17ADBuLL, 0x000000000069DA32uLL},
+{0xFFFFFFFF00000010uLL, 0x000000000747AE14uLL, 0x000000232A32A558uLL, 0x0000000004414530uLL},
+{0xFFFFFFFF00000010uLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x0000000000000012uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000000000016uLL},
+{0xFFFFFFFF00000010uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000000000012uLL},
+{0xFFFFFFFF00000010uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000012uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000016uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000000001CuLL},
+{0xFFFFFFFF00000010uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x0000000000000120uLL},
+{0xFFFFFFFF00000010uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000A302DD32uLL},
+{0xFFFFFFFF00000010uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000417B731CuLL},
+{0xFFFFFFFF00000010uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000AAAAAABAuLL},
+{0xFFFFFFFF00000010uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000080000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000018000000FuLL},
+{0xFFFFFFFF00000010uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000100000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000080000011uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000000000012uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000180000016uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000100000060uLL},
+{0xFFFFFFFF00000010uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x000000014A8EC4C6uLL},
+{0xFFFFFFFF00000010uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016560EF18uLL},
+{0xFFFFFFFF00000010uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000066666676uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000010000000FuLL},
+{0xFFFFFFFF00000010uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000AAAAAABAuLL},
+{0xFFFFFFFF00000010uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000055555565uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002AAAAAABCuLL},
+{0xFFFFFFFF00000010uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x0000000255555568uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000200000014uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000AAAAAAE0uLL},
+{0xFFFFFFFF00000010uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000381FDFC0uLL},
+{0xFFFFFFFF00000010uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000010C416098uLL},
+{0xFFFFFFFF00000010uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000349249258uLL},
+{0xFFFFFFFF00000010uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x0000000300000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003C000000DuLL},
+{0xFFFFFFFF00000010uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000038000000EuLL},
+{0xFFFFFFFF00000010uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000034000000FuLL},
+{0xFFFFFFFF00000010uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F00000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF0000011uLL},
+{0xFFFFFFFF00000010uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE0000012uLL},
+{0xFFFFFFFF00000010uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED0000013uLL},
+{0xFFFFFFFF00000010uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E00000020uLL},
+{0xFFFFFFFF00000010uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000002FFFDE0A2uLL},
+{0xFFFFFFFF00000010uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000547AA9790uLL},
+{0xFFFFFFFF00000010uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000030F83E108uLL},
+{0xFFFFFFFF00000010uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000300000010uLL},
+{0xFFFFFFFF00000010uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000002D2D2D3DuLL},
+{0xFFFFFFFF00000010uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000001E1E1E2EuLL},
+{0xFFFFFFFF00000010uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000000F0F0F1FuLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB00000010uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFEEuLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFCCuLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFFAAuLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CAFFFFFDF0uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA002AD6DCuLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA087AE168uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA00000032uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA00000010uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A900000076uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A900000054uLL},
+{0xFFFFFFFF00000010uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A900000032uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334300000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333342FFFFFFEDuLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333342FFFFFFCAuLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333342FFFFFFA7uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333342FFFFFDE0uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341F8A491E2uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334201333354uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333180000033uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333180000010uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332000000079uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332000000056uLL},
+{0xFFFFFFFF00000010uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332000000033uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000100000010uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000010000000EuLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000010000000CuLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000010000000AuLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000000FFFFFFF0uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F0F3761CuLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F170A3E8uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000012uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000013uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000012uLL},
+{0xFFFFFFFF00000010uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000011uLL},
+{0xFFFFFFFF00000010uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF0000000FuLL},
+{0xFFFFFFFF00000010uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF0000000EuLL},
+{0xFFFFFFFF00000010uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF0000000DuLL},
+{0xFFFFFFFF00000010uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF00000010uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEF879BB16uLL},
+{0xFFFFFFFF00000010uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFEF8B851FCuLL},
+{0xFFFFFFFF00000010uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000011uLL},
+{0xFFFFFFFF00000010uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE80000010uLL},
+{0xFFFFFFFF00000010uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000013uLL},
+{0xFFFFFFFF00000010uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000012uLL},
+{0xFFFFFFFF00000010uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE00000011uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000200000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000020000000FuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000020000000EuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000020000000DuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB16uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851FCuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000011uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000180000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000013uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000012uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000011uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000100000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000010000000FuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000010000000EuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000010000000DuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB16uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851FCuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000011uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000080000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000013uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000012uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000011uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000000000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000000000000FuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000000000000EuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000000000000DuLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF00000010uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF00000010uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x7FFFFFFF83C3227DuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000000000003uLL, 0x55555555028216FEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000000000010uLL, 0x0FFFFFFFF078644FuLL, 0x000000000000000AuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000000078644FAuLL, 0x0000002205B17ADCuLL, 0x000000000069DA22uLL},
+{0xFFFFFFFF078644FAuLL, 0x000000000747AE14uLL, 0x000000232A32A559uLL, 0x00000000047FDC06uLL},
+{0xFFFFFFFF078644FAuLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x00000000078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000007864500uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x00000000078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x00000000078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000007864500uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x0000000007864506uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x000000000786460AuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000AA89221CuLL},
+{0xFFFFFFFF078644FAuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x000000004901B806uLL},
+{0xFFFFFFFF078644FAuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000B230EFA4uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x00000000878644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000001878644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000001078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x00000000878644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x00000000078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x0000000187864500uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000010786454AuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x00000001521509B0uLL},
+{0xFFFFFFFF078644FAuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016CE73402uLL},
+{0xFFFFFFFF078644FAuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x000000006DECAB60uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000001078644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000B230EFA4uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x000000005CDB9A4FuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002B230EFA6uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000025CDB9A52uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x00000002078644FEuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000B230EFCAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x000000003FA624AAuLL},
+{0xFFFFFFFF078644FAuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x0000000113C7A582uLL},
+{0xFFFFFFFF078644FAuLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x0000000350AAD742uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x00000003078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003C78644F7uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000003878644F8uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000003478644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF78644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE78644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED78644FDuLL},
+{0xFFFFFFFF078644FAuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E0786450AuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000030784258CuLL},
+{0xFFFFFFFF078644FAuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x000000054F30DC7AuLL},
+{0xFFFFFFFF078644FAuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x00000003170A25F2uLL},
+{0xFFFFFFFF078644FAuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000003078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x0000000034B37227uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x0000000025A46318uLL},
+{0xFFFFFFFF078644FAuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x0000000016955409uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CB078644D8uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CB078644B6uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CB07864494uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CB078642DAuLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA07B11BC6uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA10012652uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA0786451CuLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A907864560uLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A90786453EuLL},
+{0xFFFFFFFF078644FAuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A90786451CuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333343078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333343078644D7uLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333343078644B4uLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x0133334307864491uLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333343078642CAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333342002AD6CCuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334208B9783EuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x013333318786451DuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x01333331878644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332007864563uLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332007864540uLL},
+{0xFFFFFFFF078644FAuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x013333200786451DuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000001078644F8uLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000001078644F6uLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000001078644F4uLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000001078644DAuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F879BB06uLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F8F6E8D2uLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x00000000078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF078644FDuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF078644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF078644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF078644F8uLL},
+{0xFFFFFFFF078644FAuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF078644F7uLL},
+{0xFFFFFFFF078644FAuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF078644EAuLL},
+{0xFFFFFFFF078644FAuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF078644FAuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF003E96E6uLL},
+{0xFFFFFFFF078644FAuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE878644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE878644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FDuLL},
+{0xFFFFFFFF078644FAuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE078644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000002078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000002078644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000002078644F8uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000002078644F7uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000002078644EAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000002003E96E6uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x00000001878644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x00000001878644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x00000001078644FDuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000001078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000001078644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000001078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000001078644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000001078644F8uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000001078644F7uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000001078644EAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000001003E96E6uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x00000000878644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x00000000878644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x00000000078644FDuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000078644FCuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000078644FBuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000078644F9uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000078644F8uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000078644F7uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000078644EAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000003E96E6uLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF078644FAuLL},
+{0xFFFFFFFF078644FAuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF078644FAuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x7FFFFFFF83A3D70AuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000000000003uLL, 0x55555555026D3A06uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000000000010uLL, 0x0FFFFFFFF0747AE1uLL, 0x0000000000000004uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000000078644FAuLL, 0x0000002205B17ADCuLL, 0x00000000002B433CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000000747AE14uLL, 0x000000232A32A559uLL, 0x0000000004414520uLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000007FFFFFFFuLL, 0x0000000200000002uLL, 0x000000000747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x000000000747AE1AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x000000000747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x000000000747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x000000000747AE1AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000000747AE20uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x000000000747AF24uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5BuLL, 0x00000000AA4A8B36uLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x0000000048C32120uLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x00000000B1F258BEuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000008747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x000000018747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x000000010747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x000000008747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x000000000747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000200000003uLL, 0x000000007FFFFFFEuLL, 0x000000018747AE1AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000010747AE64uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x0000000151D672CAuLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x000000016CA89D1CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x000000006DAE147AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000010747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000000B1F258BEuLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x000000005C9D0369uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000300000001uLL, 0x0000000055555554uLL, 0x00000002B1F258C0uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x000000025C9D036CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x000000020747AE18uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000000B1F258E4uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x000000003F678DC4uLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x0000000113890E9CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000037FFFFFFFuLL, 0x0000000049249248uLL, 0x00000003506C405CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x000000030747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000003FFFFFFFDuLL, 0x000000003FFFFFFFuLL, 0x00000003C747AE11uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x000000038747AE12uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x000000034747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000EF747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000EE747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000ED747AE17uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E0747AE24uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x0000000307458EA6uLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x000000054EF24594uLL},
+{0xFFFFFFFF0747AE14uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x0000000316CB8F0CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x000000030747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000003474DB41uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000002565CC32uLL},
+{0xFFFFFFFF0747AE14uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000001656BD23uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CB0747ADF2uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CB0747ADD0uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CB0747ADAEuLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CB0747ABF4uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA077284E0uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA0FC28F6CuLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA0747AE36uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A90747AE7AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A90747AE58uLL},
+{0xFFFFFFFF0747AE14uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A90747AE36uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x013333430747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333430747ADF1uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333430747ADCEuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333430747ADABuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333430747ABE4uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333341FFEC3FE6uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x01333342087AE158uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x013333318747AE37uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333318747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x013333200747AE7DuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x013333200747AE5AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x013333200747AE37uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000010747AE12uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000010747AE10uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000010747AE0EuLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x000000010747ADF4uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000000F83B2420uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000000F8B851ECuLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x000000000747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE17uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE12uLL},
+{0xFFFFFFFF0747AE14uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE11uLL},
+{0xFFFFFFFF0747AE14uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF0747AE04uLL},
+{0xFFFFFFFF0747AE14uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFC1691AuLL},
+{0xFFFFFFFF0747AE14uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF0747AE14uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE8747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFE8747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE17uLL},
+{0xFFFFFFFF0747AE14uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE0747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x000000020747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000020747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000020747AE12uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000020747AE11uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000020747AE04uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000001FFC1691AuLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000018747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000018747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x000000010747AE17uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x000000010747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x000000010747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x000000010747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000010747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000010747AE12uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000010747AE11uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x000000010747AE04uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000000FFC1691AuLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000008747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000008747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x000000000747AE17uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x000000000747AE16uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x000000000747AE15uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x000000000747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000000747AE13uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000000747AE12uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000000747AE11uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000000747AE04uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL},
+{0xFFFFFFFF0747AE14uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF0747AE14uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x7FFFFFFFBFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000003uLL, 0x555555552AAAAAAAuLL, 0x0000000000000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000010uLL, 0x0FFFFFFFF7FFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000000078644FAuLL, 0x0000002205B17AECuLL, 0x00000000007F4587uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000000747AE14uLL, 0x000000232A32A56AuLL, 0x00000000013707B7uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFEuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000080000005uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000005uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000008000000BuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x000000008000010FuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5CuLL, 0x000000001B7C9827uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000C17B730BuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x000000012AAAAAA9uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000200000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x000000018000004FuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x00000001CA8EC4B5uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x00000001E560EF07uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x00000000E6666665uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x000000012AAAAAA9uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555554uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000300000001uLL, 0x0000000055555555uLL, 0x000000002AAAAAAAuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x00000002D5555557uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000280000003uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x000000012AAAAACFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000B81FDFAFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000018C416087uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000049249249uLL, 0x0000000049249248uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000000380000000uLL, 0x0000000049249248uLL, 0x000000037FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000040000000uLL, 0x000000003FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x000000003FFFFFFFuLL, 0x00000003FFFFFFFDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000F70000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000F60000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000F50000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E8000000FuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000037FFDE091uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x00000005C7AA977FuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000038F83E0F7uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x000000037FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x00000000AD2D2D2CuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000009E1E1E1DuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000008F0F0F0EuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFFDDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFFBBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFF99uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFDDFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA802AD6CBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA887AE157uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA80000021uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A980000065uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A980000043uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A980000021uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x013333437FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333437FFFFFDCuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333437FFFFFB9uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333437FFFFF96uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333437FFFFDCFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133334278A491D1uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334281333343uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333200000022uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x01333331FFFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332080000068uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332080000045uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332080000022uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000017FFFFFFBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000017FFFFFF9uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x000000017FFFFFDFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x0000000170F3760BuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x000000017170A3D7uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFCuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFEFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFF7879BB05uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF78B851EBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000027FFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000027FFFFFFDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000027FFFFFFCuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000027FFFFFEFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x000000027879BB05uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000278B851EBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000180000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000180000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFCuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFEFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB05uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851EBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFCuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFEFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB05uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851EBuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL, 0xFFFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFF7FFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0x0000000000000001uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000000000002uLL, 0x7FFFFFFFC0000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000000000003uLL, 0x555555552AAAAAAAuLL, 0x0000000000000002uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000000000010uLL, 0x0FFFFFFFF8000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000000078644FAuLL, 0x0000002205B17AECuLL, 0x00000000007F4588uLL},
+{0xFFFFFFFF80000000uLL, 0x000000000747AE14uLL, 0x000000232A32A56AuLL, 0x00000000013707B8uLL},
+{0xFFFFFFFF80000000uLL, 0x000000007FFFFFFFuLL, 0x0000000200000003uLL, 0x0000000000000003uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000080000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000000FFFFFFFDuLL, 0x0000000100000002uLL, 0x0000000080000006uLL},
+{0xFFFFFFFF80000000uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF80000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000080000002uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000100000002uLL, 0x00000000FFFFFFFDuLL, 0x0000000080000006uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000100000003uLL, 0x00000000FFFFFFFCuLL, 0x000000008000000CuLL},
+{0xFFFFFFFF80000000uLL, 0x0000000100000010uLL, 0x00000000FFFFFFEFuLL, 0x0000000080000110uLL},
+{0xFFFFFFFF80000000uLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5CuLL, 0x000000001B7C9828uLL},
+{0xFFFFFFFF80000000uLL, 0x000000010747AE14uLL, 0x00000000F8EBDA59uLL, 0x00000000C17B730CuLL},
+{0xFFFFFFFF80000000uLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAAAuLL, 0x000000012AAAAAAAuLL},
+{0xFFFFFFFF80000000uLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000001FFFFFFFFuLL, 0x0000000080000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x0000000180000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000200000003uLL, 0x000000007FFFFFFFuLL, 0x0000000000000003uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000200000010uLL, 0x000000007FFFFFFBuLL, 0x0000000180000050uLL},
+{0xFFFFFFFF80000000uLL, 0x00000002078644FAuLL, 0x000000007E256849uLL, 0x00000001CA8EC4B6uLL},
+{0xFFFFFFFF80000000uLL, 0x000000020747AE14uLL, 0x000000007E349CA6uLL, 0x00000001E560EF08uLL},
+{0xFFFFFFFF80000000uLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x00000000E6666666uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x000000012AAAAAAAuLL},
+{0xFFFFFFFF80000000uLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x00000000D5555555uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000300000001uLL, 0x0000000055555555uLL, 0x000000002AAAAAABuLL},
+{0xFFFFFFFF80000000uLL, 0x0000000300000002uLL, 0x0000000055555554uLL, 0x00000002D5555558uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000280000004uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x000000012AAAAAD0uLL},
+{0xFFFFFFFF80000000uLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000000B81FDFB0uLL},
+{0xFFFFFFFF80000000uLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000018C416088uLL},
+{0xFFFFFFFF80000000uLL, 0x000000037FFFFFFFuLL, 0x0000000049249249uLL, 0x0000000049249249uLL},
+{0xFFFFFFFF80000000uLL, 0x0000000380000000uLL, 0x0000000049249249uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000003FFFFFFFDuLL, 0x0000000040000000uLL, 0x0000000040000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000003FFFFFFFEuLL, 0x0000000040000000uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000003FFFFFFFFuLL, 0x000000003FFFFFFFuLL, 0x00000003BFFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000F80000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000F70000001uLL},
+{0xFFFFFFFF80000000uLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000F60000002uLL},
+{0xFFFFFFFF80000000uLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000F50000003uLL},
+{0xFFFFFFFF80000000uLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000E80000010uLL},
+{0xFFFFFFFF80000000uLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x000000037FFDE092uLL},
+{0xFFFFFFFF80000000uLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x00000005C7AA9780uLL},
+{0xFFFFFFFF80000000uLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000038F83E0F8uLL},
+{0xFFFFFFFF80000000uLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x0000000380000000uLL},
+{0xFFFFFFFF80000000uLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x00000000AD2D2D2DuLL},
+{0xFFFFFFFF80000000uLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000009E1E1E1EuLL},
+{0xFFFFFFFF80000000uLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000008F0F0F0FuLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CB80000000uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFFDEuLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFFBCuLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFF9AuLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CB7FFFFDE0uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CA802AD6CCuLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CA887AE158uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BA80000022uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BA80000000uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6A980000066uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6A980000044uLL},
+{0xFFFFFFFF80000000uLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6A980000022uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x0133334380000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x013333437FFFFFDDuLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x013333437FFFFFBAuLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x013333437FFFFF97uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x013333437FFFFDD0uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x0133334278A491D2uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334281333344uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333200000023uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x0133333200000000uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332080000069uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332080000046uLL},
+{0xFFFFFFFF80000000uLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332080000023uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x0000000180000000uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x000000017FFFFFFCuLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x000000017FFFFFFAuLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x000000017FFFFFE0uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x0000000170F3760CuLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x000000017170A3D8uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000003uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000002uLL},
+{0xFFFFFFFF80000000uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000001uLL},
+{0xFFFFFFFF80000000uLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF80000000uLL},
+{0xFFFFFFFF80000000uLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFEuLL},
+{0xFFFFFFFF80000000uLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFDuLL},
+{0xFFFFFFFF80000000uLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFF0uLL},
+{0xFFFFFFFF80000000uLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFF7879BB06uLL},
+{0xFFFFFFFF80000000uLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFF78B851ECuLL},
+{0xFFFFFFFF80000000uLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFF80000000uLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFF80000000uLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000003uLL},
+{0xFFFFFFFF80000000uLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000002uLL},
+{0xFFFFFFFF80000000uLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFE80000001uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x0000000280000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x000000027FFFFFFEuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x000000027FFFFFFDuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x000000027FFFFFF0uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x000000027879BB06uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x0000000278B851ECuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000200000001uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000180000003uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000180000002uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000001uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x000000017FFFFFF0uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x000000017879BB06uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x0000000178B851ECuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000080000003uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000080000002uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000001uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x000000007FFFFFF0uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x000000007879BB06uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x0000000078B851ECuLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFF80000000uLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL, 0xFFFFFFFF80000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFF80000000uLL},
+{0xFFFFFFFF80000000uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFF80000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000002uLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000003uLL, 0x5555555555555554uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000010uLL, 0x0FFFFFFFFFFFFFFFuLL, 0x000000000000000DuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000000078644FAuLL, 0x0000002205B17AFDuLL, 0x000000000094B0EBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000000747AE14uLL, 0x000000232A32A57BuLL, 0x0000000005747861uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000007FFFFFFFuLL, 0x0000000200000004uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000006uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000006uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000100000010uLL, 0x00000000FFFFFFF0uLL, 0x00000000000000FDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5CuLL, 0x000000009B7C9825uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA5AuLL, 0x000000003A33C4F5uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAABuLL, 0x000000002AAAAAA8uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000001FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000200000003uLL, 0x000000007FFFFFFFuLL, 0x0000000080000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000200000010uLL, 0x000000007FFFFFFCuLL, 0x000000000000003DuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000002078644FAuLL, 0x000000007E25684AuLL, 0x0000000043087FB9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000020747AE14uLL, 0x000000007E349CA7uLL, 0x000000005E1940F1uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000166666663uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000001AAAAAAA7uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000155555552uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000300000001uLL, 0x0000000055555555uLL, 0x00000000AAAAAAA8uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000300000002uLL, 0x0000000055555555uLL, 0x0000000055555553uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000300000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000001AAAAAACDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000001381FDFADuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000020C416085uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000037FFFFFFFuLL, 0x0000000049249249uLL, 0x00000000C9249246uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000000380000000uLL, 0x0000000049249249uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000003FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000003FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000003FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000003FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000FFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000FEFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000FDFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000FD0000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000F0000000DuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000003FFFDE08FuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000647AA977DuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000040F83E0F5uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000003FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000012D2D2D2AuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000011E1E1E1BuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000010F0F0F0CuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFDBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFB9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFF97uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFDDDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CB002AD6C9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CB087AE155uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BB0000001FuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BAFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6AA00000063uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6AA00000041uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6AA0000001FuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333343FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333343FFFFFFDAuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333343FFFFFFB7uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333343FFFFFF94uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333343FFFFFDCDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333342F8A491CFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334301333341uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333280000020uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333327FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332100000066uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332100000043uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332100000020uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000001FFFFFFF9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000001FFFFFFF7uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000001FFFFFFDDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000001F0F37609uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000001F170A3D5uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFAuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFEDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFFF879BB03uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFFF8B851E9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFAuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000002FFFFFFEDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000002F879BB03uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000002F8B851E9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000027FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000027FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFAuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB03uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851E9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFAuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB03uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851E9uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL, 0xFFFFFFFFFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFDuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFFFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000003uLL, 0x5555555555555554uLL, 0x0000000000000002uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000010uLL, 0x0FFFFFFFFFFFFFFFuLL, 0x000000000000000EuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000000078644FAuLL, 0x0000002205B17AFDuLL, 0x000000000094B0ECuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000000747AE14uLL, 0x000000232A32A57BuLL, 0x0000000005747862uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000007FFFFFFFuLL, 0x0000000200000004uLL, 0x0000000000000002uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000007uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000002uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000000FFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFEuLL, 0x0000000100000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000002uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000007uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000100000010uLL, 0x00000000FFFFFFF0uLL, 0x00000000000000FEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5CuLL, 0x000000009B7C9826uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA5AuLL, 0x000000003A33C4F6uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAABuLL, 0x000000002AAAAAA9uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000001FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000100000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000200000003uLL, 0x000000007FFFFFFFuLL, 0x0000000080000001uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000200000010uLL, 0x000000007FFFFFFCuLL, 0x000000000000003EuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000002078644FAuLL, 0x000000007E25684AuLL, 0x0000000043087FBAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000020747AE14uLL, 0x000000007E349CA7uLL, 0x000000005E1940F2uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000166666664uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000001AAAAAAA8uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000155555553uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000300000001uLL, 0x0000000055555555uLL, 0x00000000AAAAAAA9uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000300000002uLL, 0x0000000055555555uLL, 0x0000000055555554uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000300000003uLL, 0x0000000055555554uLL, 0x0000000300000002uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000001AAAAAACEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000001381FDFAEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000020C416086uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000037FFFFFFFuLL, 0x0000000049249249uLL, 0x00000000C9249247uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000000380000000uLL, 0x0000000049249249uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000003FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000003FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000003FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000003FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000FFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000FEFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000FE0000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000FD0000001uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000F0000000EuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000003FFFDE090uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000647AA977EuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000040F83E0F6uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000003FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000012D2D2D2BuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000011E1E1E1CuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000010F0F0F0DuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFDCuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFBAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFF98uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFDDEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CB002AD6CAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CB087AE156uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BB00000020uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BAFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6AA00000064uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6AA00000042uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6AA00000020uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333343FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333343FFFFFFDBuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333343FFFFFFB8uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333343FFFFFF95uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333343FFFFFDCEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333342F8A491D0uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334301333342uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333280000021uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333327FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332100000067uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332100000044uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332100000021uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000001FFFFFFF8uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000001FFFFFFDEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000001F0F3760AuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000001F170A3D6uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000100000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000004uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000002uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFEEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFFF879BB04uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFFF8B851EAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFEFFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000002FFFFFFEEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000002F879BB04uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000002F8B851EAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000027FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000200000001uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB04uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB04uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EAuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFEuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL, 0xFFFFFFFFFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000002uLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000003uLL, 0x5555555555555555uLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000010uLL, 0x0FFFFFFFFFFFFFFFuLL, 0x000000000000000FuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000000078644FAuLL, 0x0000002205B17AFDuLL, 0x000000000094B0EDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000000747AE14uLL, 0x000000232A32A57BuLL, 0x0000000005747863uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000007FFFFFFFuLL, 0x0000000200000004uLL, 0x0000000000000003uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000080000000uLL, 0x00000001FFFFFFFFuLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000000FFFFFFFDuLL, 0x0000000100000003uLL, 0x0000000000000008uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000000FFFFFFFEuLL, 0x0000000100000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000000FFFFFFFFuLL, 0x0000000100000001uLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000100000000uLL, 0x00000000FFFFFFFFuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000100000001uLL, 0x00000000FFFFFFFFuLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000100000002uLL, 0x00000000FFFFFFFEuLL, 0x0000000000000003uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000100000003uLL, 0x00000000FFFFFFFDuLL, 0x0000000000000008uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000100000010uLL, 0x00000000FFFFFFF0uLL, 0x00000000000000FFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000001078644FAuLL, 0x00000000F8B0BB5CuLL, 0x000000009B7C9827uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000010747AE14uLL, 0x00000000F8EBDA5AuLL, 0x000000003A33C4F7uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000017FFFFFFFuLL, 0x00000000AAAAAAABuLL, 0x000000002AAAAAAAuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000180000000uLL, 0x00000000AAAAAAAAuLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000001FFFFFFFDuLL, 0x0000000080000000uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000001FFFFFFFEuLL, 0x0000000080000000uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000001FFFFFFFFuLL, 0x0000000080000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000200000000uLL, 0x000000007FFFFFFFuLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000200000001uLL, 0x000000007FFFFFFFuLL, 0x0000000180000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000200000002uLL, 0x000000007FFFFFFFuLL, 0x0000000100000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000200000003uLL, 0x000000007FFFFFFFuLL, 0x0000000080000002uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000200000010uLL, 0x000000007FFFFFFCuLL, 0x000000000000003FuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000002078644FAuLL, 0x000000007E25684AuLL, 0x0000000043087FBBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000020747AE14uLL, 0x000000007E349CA7uLL, 0x000000005E1940F3uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000027FFFFFFFuLL, 0x0000000066666666uLL, 0x0000000166666665uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000280000000uLL, 0x0000000066666666uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000002FFFFFFFDuLL, 0x0000000055555555uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000002FFFFFFFEuLL, 0x0000000055555555uLL, 0x00000001AAAAAAA9uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000002FFFFFFFFuLL, 0x0000000055555555uLL, 0x0000000155555554uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000300000000uLL, 0x0000000055555555uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000300000001uLL, 0x0000000055555555uLL, 0x00000000AAAAAAAAuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000300000002uLL, 0x0000000055555555uLL, 0x0000000055555555uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000300000003uLL, 0x0000000055555555uLL, 0x0000000000000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000300000010uLL, 0x0000000055555553uLL, 0x00000001AAAAAACFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000003078644FAuLL, 0x0000000054816148uLL, 0x00000001381FDFAFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000030747AE14uLL, 0x00000000548833C6uLL, 0x000000020C416087uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000037FFFFFFFuLL, 0x0000000049249249uLL, 0x00000000C9249248uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000000380000000uLL, 0x0000000049249249uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000003FFFFFFFDuLL, 0x0000000040000000uLL, 0x00000000BFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000003FFFFFFFEuLL, 0x0000000040000000uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000003FFFFFFFFuLL, 0x0000000040000000uLL, 0x000000003FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000001000000000uLL, 0x000000000FFFFFFFuLL, 0x0000000FFFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000001000000001uLL, 0x000000000FFFFFFFuLL, 0x0000000FF0000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000001000000002uLL, 0x000000000FFFFFFFuLL, 0x0000000FE0000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000001000000003uLL, 0x000000000FFFFFFFuLL, 0x0000000FD0000002uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000001000000010uLL, 0x000000000FFFFFFFuLL, 0x0000000F0000000FuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000010078644FAuLL, 0x000000000FF87D43uLL, 0x00000003FFFDE091uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000100747AE14uLL, 0x000000000FF8BBA0uLL, 0x0000000647AA977FuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x000000107FFFFFFFuLL, 0x000000000F83E0F8uLL, 0x000000040F83E0F7uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0000001080000000uLL, 0x000000000F83E0F8uLL, 0x00000003FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000010FFFFFFFDuLL, 0x000000000F0F0F0FuLL, 0x000000012D2D2D2CuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000010FFFFFFFEuLL, 0x000000000F0F0F0FuLL, 0x000000011E1E1E1DuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x00000010FFFFFFFFuLL, 0x000000000F0F0F0FuLL, 0x000000010F0F0F0EuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA00000000uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA00000001uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFDDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA00000002uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFFBBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA00000003uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFF99uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA00000010uLL, 0x0000000000000022uLL, 0x002AD6CBFFFFFDDFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA078644FAuLL, 0x0000000000000022uLL, 0x002AD6CB002AD6CBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA0747AE14uLL, 0x0000000000000022uLL, 0x002AD6CB087AE157uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA7FFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6BB00000021uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FA80000000uLL, 0x0000000000000022uLL, 0x002AD6BAFFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FAFFFFFFFDuLL, 0x0000000000000022uLL, 0x002AD6AA00000065uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FAFFFFFFFEuLL, 0x0000000000000022uLL, 0x002AD6AA00000043uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x078644FAFFFFFFFFuLL, 0x0000000000000022uLL, 0x002AD6AA00000021uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE1400000000uLL, 0x0000000000000023uLL, 0x01333343FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE1400000001uLL, 0x0000000000000023uLL, 0x01333343FFFFFFDCuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE1400000002uLL, 0x0000000000000023uLL, 0x01333343FFFFFFB9uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE1400000003uLL, 0x0000000000000023uLL, 0x01333343FFFFFF96uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE1400000010uLL, 0x0000000000000023uLL, 0x01333343FFFFFDCFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE14078644FAuLL, 0x0000000000000023uLL, 0x01333342F8A491D1uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE140747AE14uLL, 0x0000000000000023uLL, 0x0133334301333343uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE147FFFFFFFuLL, 0x0000000000000023uLL, 0x0133333280000022uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE1480000000uLL, 0x0000000000000023uLL, 0x013333327FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE14FFFFFFFDuLL, 0x0000000000000023uLL, 0x0133332100000068uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE14FFFFFFFEuLL, 0x0000000000000023uLL, 0x0133332100000045uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x0747AE14FFFFFFFFuLL, 0x0000000000000023uLL, 0x0133332100000022uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000000uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000001uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000002uLL, 0x0000000000000002uLL, 0x00000001FFFFFFFBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000003uLL, 0x0000000000000002uLL, 0x00000001FFFFFFF9uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF00000010uLL, 0x0000000000000002uLL, 0x00000001FFFFFFDFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF078644FAuLL, 0x0000000000000002uLL, 0x00000001F0F3760BuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF0747AE14uLL, 0x0000000000000002uLL, 0x00000001F170A3D7uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF7FFFFFFFuLL, 0x0000000000000002uLL, 0x0000000100000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFF80000000uLL, 0x0000000000000002uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFDuLL, 0x0000000000000002uLL, 0x0000000000000005uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFEuLL, 0x0000000000000002uLL, 0x0000000000000003uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x7FFFFFFFFFFFFFFFuLL, 0x0000000000000002uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x8000000000000000uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x8000000000000001uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x8000000000000002uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x8000000000000003uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x8000000000000010uLL, 0x0000000000000001uLL, 0x7FFFFFFFFFFFFFEFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x80000000078644FAuLL, 0x0000000000000001uLL, 0x7FFFFFFFF879BB05uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x800000000747AE14uLL, 0x0000000000000001uLL, 0x7FFFFFFFF8B851EBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x800000007FFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF80000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x8000000080000000uLL, 0x0000000000000001uLL, 0x7FFFFFFF7FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x80000000FFFFFFFDuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000002uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x80000000FFFFFFFEuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0x80000000FFFFFFFFuLL, 0x0000000000000001uLL, 0x7FFFFFFF00000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000000uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000001uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000002uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000003uLL, 0x0000000000000001uLL, 0x00000002FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD00000010uLL, 0x0000000000000001uLL, 0x00000002FFFFFFEFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD078644FAuLL, 0x0000000000000001uLL, 0x00000002F879BB05uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD0747AE14uLL, 0x0000000000000001uLL, 0x00000002F8B851EBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000280000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFD80000000uLL, 0x0000000000000001uLL, 0x000000027FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000200000002uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000200000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFDFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000200000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000000uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000001uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000002uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000003uLL, 0x0000000000000001uLL, 0x00000001FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE00000010uLL, 0x0000000000000001uLL, 0x00000001FFFFFFEFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE078644FAuLL, 0x0000000000000001uLL, 0x00000001F879BB05uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE0747AE14uLL, 0x0000000000000001uLL, 0x00000001F8B851EBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000180000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFE80000000uLL, 0x0000000000000001uLL, 0x000000017FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000100000002uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000100000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFEFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000100000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000000uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000001uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFEuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000002uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFDuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000003uLL, 0x0000000000000001uLL, 0x00000000FFFFFFFCuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF00000010uLL, 0x0000000000000001uLL, 0x00000000FFFFFFEFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF078644FAuLL, 0x0000000000000001uLL, 0x00000000F879BB05uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF0747AE14uLL, 0x0000000000000001uLL, 0x00000000F8B851EBuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF7FFFFFFFuLL, 0x0000000000000001uLL, 0x0000000080000000uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFF80000000uLL, 0x0000000000000001uLL, 0x000000007FFFFFFFuLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFDuLL, 0x0000000000000001uLL, 0x0000000000000002uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFEuLL, 0x0000000000000001uLL, 0x0000000000000001uLL},
+{0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL, 0x0000000000000001uLL, 0x0000000000000000uLL}
+};
+#endif
+
+int main()
+{
+#if __arm__
+    const unsigned N = sizeof(tests) / sizeof(tests[0]);
+    unsigned i;
+    for (i = 0; i < N; ++i)
+        if (test_aeabi_uldivmod(tests[i][0], tests[i][1], tests[i][2], tests[i][3]))
+            return 1;
+#else
+    printf("skipped\n");
+#endif
+
+    return 0;
+}
diff --git a/test/builtins/Unit/arm/call_apsr.S b/test/builtins/Unit/arm/call_apsr.S
index b5e154c..2656f8d 100644
--- a/test/builtins/Unit/arm/call_apsr.S
+++ b/test/builtins/Unit/arm/call_apsr.S
@@ -22,11 +22,11 @@
 // }
 
 DEFINE_COMPILERRT_PRIVATE_FUNCTION(call_apsr_d)
-    push {lr}
-    ldr ip, [sp, #4]
-    blx ip
+    push {r7, lr}
+    ldr r7, [sp, #8]
+    blx r7
     mrs r0, apsr
-    pop {pc}
+    pop {r7, pc}
 END_COMPILERRT_FUNCTION(call_apsr_d)
 
 // __attribute__((pcs("aapcs")))
diff --git a/test/builtins/Unit/ashldi3_test.c b/test/builtins/Unit/ashldi3_test.c
index 398fb69..f0984e0 100644
--- a/test/builtins/Unit/ashldi3_test.c
+++ b/test/builtins/Unit/ashldi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ashldi3_test.c - Test __ashldi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ashlti3_test.c b/test/builtins/Unit/ashlti3_test.c
index 595e353..0618661 100644
--- a/test/builtins/Unit/ashlti3_test.c
+++ b/test/builtins/Unit/ashlti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ashlti3_test.c - Test __ashlti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ashrdi3_test.c b/test/builtins/Unit/ashrdi3_test.c
index ee6409c..a987c95 100644
--- a/test/builtins/Unit/ashrdi3_test.c
+++ b/test/builtins/Unit/ashrdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ashrdi3_test.c - Test __ashrdi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ashrti3_test.c b/test/builtins/Unit/ashrti3_test.c
index 201582d..1f08653 100644
--- a/test/builtins/Unit/ashrti3_test.c
+++ b/test/builtins/Unit/ashrti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ashrti3_test.c - Test __ashrti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/bswapdi2_test.c b/test/builtins/Unit/bswapdi2_test.c
index 2d830cf..57ee38b 100644
--- a/test/builtins/Unit/bswapdi2_test.c
+++ b/test/builtins/Unit/bswapdi2_test.c
@@ -1,3 +1,5 @@
+// UNSUPPORTED: armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- bswapdi2_test.c - Test __bswapdi2 ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -11,34 +13,25 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <stdlib.h>
+#include <math.h>
 #include <stdint.h>
 #include <stdio.h>
-#include <math.h>
-
+#include <stdlib.h>
 
 extern uint64_t __bswapdi2(uint64_t);
 
-#if __arm__
-int test__bswapdi2(uint64_t a, uint64_t expected)
-{
-    uint64_t actual = __bswapdi2(a);
-    if (actual != expected)
-        printf("error in test__bswapsi2(0x%0llX) = 0x%0llX, expected 0x%0llX\n",
-               a, actual, expected);
-    return actual != expected;
+int test__bswapdi2(uint64_t a, uint64_t expected) {
+  uint64_t actual = __bswapdi2(a);
+  if (actual != expected)
+    printf("error in test__bswapsi2(0x%0llX) = 0x%0llX, expected 0x%0llX\n", a,
+           actual, expected);
+  return actual != expected;
 }
-#endif
 
-int main()
-{
-#if __arm__
-    if (test__bswapdi2(0x123456789ABCDEF0LL, 0xF0DEBC9A78563412LL))
-        return 1;
-    if (test__bswapdi2(0x0000000100000002LL, 0x0200000001000000LL))
-        return 1;
-#else
-    printf("skipped\n");
-#endif
-    return 0;
+int main() {
+  if (test__bswapdi2(0x123456789ABCDEF0LL, 0xF0DEBC9A78563412LL))
+    return 1;
+  if (test__bswapdi2(0x0000000100000002LL, 0x0200000001000000LL))
+    return 1;
+  return 0;
 }
diff --git a/test/builtins/Unit/bswapsi2_test.c b/test/builtins/Unit/bswapsi2_test.c
index 4488a88..899c251 100644
--- a/test/builtins/Unit/bswapsi2_test.c
+++ b/test/builtins/Unit/bswapsi2_test.c
@@ -1,3 +1,5 @@
+// UNSUPPORTED: armv6m-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- bswapsi2_test.c - Test __bswapsi2 ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -11,34 +13,25 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <stdlib.h>
+#include <math.h>
 #include <stdint.h>
 #include <stdio.h>
-#include <math.h>
-
+#include <stdlib.h>
 
 extern uint32_t __bswapsi2(uint32_t);
 
-#if __arm__
-int test__bswapsi2(uint32_t a, uint32_t expected)
-{
-    uint32_t actual = __bswapsi2(a);
-    if (actual != expected)
-        printf("error in test__bswapsi2(0x%0X) = 0x%0X, expected 0x%0X\n",
-               a, actual, expected);
-    return actual != expected;
+int test__bswapsi2(uint32_t a, uint32_t expected) {
+  uint32_t actual = __bswapsi2(a);
+  if (actual != expected)
+    printf("error in test__bswapsi2(0x%0X) = 0x%0X, expected 0x%0X\n", a,
+           actual, expected);
+  return actual != expected;
 }
-#endif
 
-int main()
-{
-#if __arm__
-    if (test__bswapsi2(0x12345678, 0x78563412))
-        return 1;
-    if (test__bswapsi2(0x00000001, 0x01000000))
-        return 1;
-#else
-    printf("skipped\n");
-#endif
-    return 0;
+int main() {
+  if (test__bswapsi2(0x12345678, 0x78563412))
+    return 1;
+  if (test__bswapsi2(0x00000001, 0x01000000))
+    return 1;
+  return 0;
 }
diff --git a/test/builtins/Unit/clear_cache_test.c b/test/builtins/Unit/clear_cache_test.c
index 0ef704f..58960ce 100644
--- a/test/builtins/Unit/clear_cache_test.c
+++ b/test/builtins/Unit/clear_cache_test.c
@@ -1,3 +1,6 @@
+// REQUIRES: native-run
+// UNSUPPORTED: arm, aarch64
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- clear_cache_test.c - Test clear_cache -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -13,12 +16,6 @@
 #include <stdint.h>
 #if defined(_WIN32)
 #include <windows.h>
-void __clear_cache(void* start, void* end)
-{
-    if (!FlushInstructionCache(GetCurrentProcess(), start, end-start))
-        exit(1);
-}
-
 static uintptr_t get_page_size() {
     SYSTEM_INFO si;
     GetSystemInfo(&si);
@@ -27,27 +24,20 @@
 #else
 #include <unistd.h>
 #include <sys/mman.h>
-extern void __clear_cache(void* start, void* end);
 
 static uintptr_t get_page_size() {
     return sysconf(_SC_PAGE_SIZE);
 }
 #endif
 
-
+extern void __clear_cache(void* start, void* end);
 
 
 typedef int (*pfunc)(void);
 
-int func1() 
-{
-    return 1;
-}
-
-int func2() 
-{
-    return 2;
-}
+// Make these static to avoid ILT jumps for incremental linking on Windows.
+static int func1() { return 1; }
+static int func2() { return 2; }
 
 void *__attribute__((noinline))
 memcpy_f(void *dst, const void *src, size_t n) {
diff --git a/test/builtins/Unit/clzdi2_test.c b/test/builtins/Unit/clzdi2_test.c
index 41e1209..a8c0e1b 100644
--- a/test/builtins/Unit/clzdi2_test.c
+++ b/test/builtins/Unit/clzdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- clzdi2_test.c - Test __clzdi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/clzsi2_test.c b/test/builtins/Unit/clzsi2_test.c
index 80b300f..f86e888 100644
--- a/test/builtins/Unit/clzsi2_test.c
+++ b/test/builtins/Unit/clzsi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- clzsi2_test.c - Test __clzsi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/clzti2_test.c b/test/builtins/Unit/clzti2_test.c
index 3a2c6fa..157838b 100644
--- a/test/builtins/Unit/clzti2_test.c
+++ b/test/builtins/Unit/clzti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- clzti2_test.c - Test __clzti2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/cmpdi2_test.c b/test/builtins/Unit/cmpdi2_test.c
index 33a12a0..1420dc7 100644
--- a/test/builtins/Unit/cmpdi2_test.c
+++ b/test/builtins/Unit/cmpdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- cmpdi2_test.c - Test __cmpdi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/cmpti2_test.c b/test/builtins/Unit/cmpti2_test.c
index d951923..a2215f3 100644
--- a/test/builtins/Unit/cmpti2_test.c
+++ b/test/builtins/Unit/cmpti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- cmpti2_test.c - Test __cmpti2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/comparedf2_test.c b/test/builtins/Unit/comparedf2_test.c
index 6623722..8446901 100644
--- a/test/builtins/Unit/comparedf2_test.c
+++ b/test/builtins/Unit/comparedf2_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- cmpdf2_test.c - Test __cmpdf2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/comparesf2_test.c b/test/builtins/Unit/comparesf2_test.c
index 026e900..1b5902f 100644
--- a/test/builtins/Unit/comparesf2_test.c
+++ b/test/builtins/Unit/comparesf2_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- cmpsf2_test.c - Test __cmpsf2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/cpu_model_test.c b/test/builtins/Unit/cpu_model_test.c
index 6a17037..6b47d14 100644
--- a/test/builtins/Unit/cpu_model_test.c
+++ b/test/builtins/Unit/cpu_model_test.c
@@ -1,4 +1,8 @@
-//===-- cpu_model_test.c - Test __builtin_cpu_supports -------------------------------===//
+// FIXME: XFAIL the test because it is expected to return non-zero value.
+// XFAIL: *
+// REQUIRES: x86-target-arch
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+//===-- cpu_model_test.c - Test __builtin_cpu_supports --------------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -11,11 +15,16 @@
 //
 //===----------------------------------------------------------------------===//
 
-// REQUIRES: x86-target-arch
+#include <stdio.h>
 
 int main (void) {
+#if defined(i386) || defined(__x86_64__)
   if(__builtin_cpu_supports("avx2"))
     return 4;
   else
     return 3;
+#else
+  printf("skipped\n");
+  return 0;
+#endif
 }
diff --git a/test/builtins/Unit/ctzdi2_test.c b/test/builtins/Unit/ctzdi2_test.c
index bde66b1..0515e20 100644
--- a/test/builtins/Unit/ctzdi2_test.c
+++ b/test/builtins/Unit/ctzdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ctzdi2_test.c - Test __ctzdi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ctzsi2_test.c b/test/builtins/Unit/ctzsi2_test.c
index cbc101f..bf8982b 100644
--- a/test/builtins/Unit/ctzsi2_test.c
+++ b/test/builtins/Unit/ctzsi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ctzsi2_test.c - Test __ctzsi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ctzti2_test.c b/test/builtins/Unit/ctzti2_test.c
index 0ca1920..bef79b6 100644
--- a/test/builtins/Unit/ctzti2_test.c
+++ b/test/builtins/Unit/ctzti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ctzti2_test.c - Test __ctzti2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/divdc3_test.c b/test/builtins/Unit/divdc3_test.c
index 80b9e86..042fd23 100644
--- a/test/builtins/Unit/divdc3_test.c
+++ b/test/builtins/Unit/divdc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divdc3_test.c - Test __divdc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -16,6 +17,8 @@
 #include <complex.h>
 #include <stdio.h>
 
+// REQUIRES: c99-complex
+
 // Returns: the quotient of (a + ib) / (c + id)
 
 COMPILER_RT_ABI double _Complex
diff --git a/test/builtins/Unit/divdf3vfp_test.c b/test/builtins/Unit/divdf3vfp_test.c
index 6f0808a..4f18409 100644
--- a/test/builtins/Unit/divdf3vfp_test.c
+++ b/test/builtins/Unit/divdf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divdf3vfp_test.c - Test __divdf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -17,7 +18,7 @@
 #include <math.h>
 
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 extern COMPILER_RT_ABI double __divdf3vfp(double a, double b);
 
 int test__divdf3vfp(double a, double b)
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__divdf3vfp(1.0, 1.0))
         return 1;
     if (test__divdf3vfp(12345.678, 1.23))
diff --git a/test/builtins/Unit/divdi3_test.c b/test/builtins/Unit/divdi3_test.c
index 1d45980..4c8c922 100644
--- a/test/builtins/Unit/divdi3_test.c
+++ b/test/builtins/Unit/divdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divdi3_test.c - Test __divdi3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/divmodsi4_test.c b/test/builtins/Unit/divmodsi4_test.c
index 6fb1c98..e766aae 100644
--- a/test/builtins/Unit/divmodsi4_test.c
+++ b/test/builtins/Unit/divmodsi4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divmodsi4_test.c - Test __divmodsi4 -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/divsc3_test.c b/test/builtins/Unit/divsc3_test.c
index 2d7c659..daa2218 100644
--- a/test/builtins/Unit/divsc3_test.c
+++ b/test/builtins/Unit/divsc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
 //===-- divsc3_test.c - Test __divsc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -16,6 +17,8 @@
 #include <complex.h>
 #include <stdio.h>
 
+// REQUIRES: c99-complex
+
 // Returns: the quotient of (a + ib) / (c + id)
 
 COMPILER_RT_ABI float _Complex
diff --git a/test/builtins/Unit/divsf3vfp_test.c b/test/builtins/Unit/divsf3vfp_test.c
index f742441..75b7eba 100644
--- a/test/builtins/Unit/divsf3vfp_test.c
+++ b/test/builtins/Unit/divsf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divsf3vfp_test.c - Test __divsf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __divsf3vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__divsf3vfp(float a, float b)
 {
     float actual = __divsf3vfp(a, b);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__divsf3vfp(1.0, 1.0))
         return 1;
     if (test__divsf3vfp(12345.678, 1.23))
diff --git a/test/builtins/Unit/divsi3_test.c b/test/builtins/Unit/divsi3_test.c
index c523367..4c5d0fb 100644
--- a/test/builtins/Unit/divsi3_test.c
+++ b/test/builtins/Unit/divsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divsi3_test.c - Test __divsi3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/divtc3_test.c b/test/builtins/Unit/divtc3_test.c
index a1f0613..7474330 100644
--- a/test/builtins/Unit/divtc3_test.c
+++ b/test/builtins/Unit/divtc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
 //===-- divtc3_test.c - Test __divtc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -17,6 +18,8 @@
 #include <math.h>
 #include <complex.h>
 
+// REQUIRES: c99-complex
+
 // Returns: the quotient of (a + ib) / (c + id)
 
 COMPILER_RT_ABI long double _Complex
diff --git a/test/builtins/Unit/divtf3_test.c b/test/builtins/Unit/divtf3_test.c
index e0def45..12cb94a 100644
--- a/test/builtins/Unit/divtf3_test.c
+++ b/test/builtins/Unit/divtf3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- divtf3_test.c - Test __divtf3 ------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/divti3_test.c b/test/builtins/Unit/divti3_test.c
index 3a94dab..9a6bf17 100644
--- a/test/builtins/Unit/divti3_test.c
+++ b/test/builtins/Unit/divti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- divti3_test.c - Test __divti3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/divxc3_test.c b/test/builtins/Unit/divxc3_test.c
index 509b4b1..6517ef1 100644
--- a/test/builtins/Unit/divxc3_test.c
+++ b/test/builtins/Unit/divxc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
 //===-- divxc3_test.c - Test __divxc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -18,6 +19,9 @@
 #include <complex.h>
 #include <stdio.h>
 
+// UNSUPPORTED: mips
+// REQUIRES: c99-complex
+
 // Returns: the quotient of (a + ib) / (c + id)
 
 COMPILER_RT_ABI long double _Complex
diff --git a/test/builtins/Unit/enable_execute_stack_test.c b/test/builtins/Unit/enable_execute_stack_test.c
index 38a142a..72fc042 100644
--- a/test/builtins/Unit/enable_execute_stack_test.c
+++ b/test/builtins/Unit/enable_execute_stack_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: native-run
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- enable_execute_stack_test.c - Test __enable_execute_stack ----------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -11,39 +13,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdint.h>
-#if defined(_WIN32)
-#include <windows.h>
-void __clear_cache(void* start, void* end)
-{
-    if (!FlushInstructionCache(GetCurrentProcess(), start, end-start))
-        exit(1);
-}
-void __enable_execute_stack(void *addr)
-{
-    MEMORY_BASIC_INFORMATION b;
-
-    if (!VirtualQuery(addr, &b, sizeof(b)))
-        exit(1);
-    if (!VirtualProtect(b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, &b.Protect))
-        exit(1);
-}
-#else
-#include <sys/mman.h>
 extern void __clear_cache(void* start, void* end);
 extern void __enable_execute_stack(void* addr);
-#endif
 
 typedef int (*pfunc)(void);
 
-int func1() 
-{
-    return 1;
-}
-
-int func2() 
-{
-    return 2;
-}
+// Make these static to avoid ILT jumps for incremental linking on Windows.
+static int func1() { return 1; }
+static int func2() { return 2; }
 
 void *__attribute__((noinline))
 memcpy_f(void *dst, const void *src, size_t n) {
@@ -67,6 +44,7 @@
     // verify you can copy and execute a function
     pfunc f1 = (pfunc)memcpy_f(execution_buffer, func1, 128);
     __clear_cache(execution_buffer, &execution_buffer[128]);
+    printf("f1: %p\n", f1);
     if ((*f1)() != 1)
         return 1;
 
diff --git a/test/builtins/Unit/eqdf2vfp_test.c b/test/builtins/Unit/eqdf2vfp_test.c
index 585bd08..69dd37b 100644
--- a/test/builtins/Unit/eqdf2vfp_test.c
+++ b/test/builtins/Unit/eqdf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- eqdf2vfp_test.c - Test __eqdf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __eqdf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__eqdf2vfp(double a, double b)
 {
     int actual = __eqdf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__eqdf2vfp(0.0, 0.0))
         return 1;
     if (test__eqdf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/eqsf2vfp_test.c b/test/builtins/Unit/eqsf2vfp_test.c
index b0eed94..9c8dc16 100644
--- a/test/builtins/Unit/eqsf2vfp_test.c
+++ b/test/builtins/Unit/eqsf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- eqsf2vfp_test.c - Test __eqsf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __eqsf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__eqsf2vfp(float a, float b)
 {
     int actual = __eqsf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__eqsf2vfp(0.0, 0.0))
         return 1;
     if (test__eqsf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/eqtf2_test.c b/test/builtins/Unit/eqtf2_test.c
index 0385835..91b35cf 100644
--- a/test/builtins/Unit/eqtf2_test.c
+++ b/test/builtins/Unit/eqtf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ eqtf2_test.c - Test __eqtf2------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/extebdsfdf2vfp_test.c b/test/builtins/Unit/extebdsfdf2vfp_test.c
index 53c7282..c350d93 100644
--- a/test/builtins/Unit/extebdsfdf2vfp_test.c
+++ b/test/builtins/Unit/extebdsfdf2vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- extendsfdf2vfp_test.c - Test __extendsfdf2vfp ---------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI double __extendsfdf2vfp(float a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__extendsfdf2vfp(float a)
 {
     double actual = __extendsfdf2vfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__extendsfdf2vfp(0.0))
         return 1;
     if (test__extendsfdf2vfp(1.0))
diff --git a/test/builtins/Unit/extenddftf2_test.c b/test/builtins/Unit/extenddftf2_test.c
index 2cfb32b..7254141 100644
--- a/test/builtins/Unit/extenddftf2_test.c
+++ b/test/builtins/Unit/extenddftf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- extenddftf2_test.c - Test __extenddftf2 --------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/extendhfsf2_test.c b/test/builtins/Unit/extendhfsf2_test.c
index 5dd994c..d423e7b 100644
--- a/test/builtins/Unit/extendhfsf2_test.c
+++ b/test/builtins/Unit/extendhfsf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- extendhfsf2_test.c - Test __extendhfsf2 --------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/extendsftf2_test.c b/test/builtins/Unit/extendsftf2_test.c
index 7dff5b6..4fad906 100644
--- a/test/builtins/Unit/extendsftf2_test.c
+++ b/test/builtins/Unit/extendsftf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- extendsftf2_test.c - Test __extendsftf2 --------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ffsdi2_test.c b/test/builtins/Unit/ffsdi2_test.c
index a27d154..80c0c08 100644
--- a/test/builtins/Unit/ffsdi2_test.c
+++ b/test/builtins/Unit/ffsdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ffsdi2_test.c - Test __ffsdi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ffssi2_test.c b/test/builtins/Unit/ffssi2_test.c
new file mode 100644
index 0000000..5d96b96
--- /dev/null
+++ b/test/builtins/Unit/ffssi2_test.c
@@ -0,0 +1,57 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+//===-- ffssi2_test.c - Test __ffssi2 -------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file tests __ffssi2 for the compiler_rt library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "int_lib.h"
+#include <stdio.h>
+
+// Returns: the index of the least significant 1-bit in a, or
+// the value zero if a is zero. The least significant bit is index one.
+
+COMPILER_RT_ABI si_int __ffssi2(si_int a);
+
+int test__ffssi2(si_int a, si_int expected)
+{
+    si_int x = __ffssi2(a);
+    if (x != expected)
+        printf("error in __ffssi2(0x%X) = %d, expected %d\n", a, x, expected);
+    return x != expected;
+}
+
+int main()
+{
+    if (test__ffssi2(0x00000000, 0))
+        return 1;
+    if (test__ffssi2(0x00000001, 1))
+        return 1;
+    if (test__ffssi2(0x00000002, 2))
+        return 1;
+    if (test__ffssi2(0x00000003, 1))
+        return 1;
+    if (test__ffssi2(0x00000004, 3))
+        return 1;
+    if (test__ffssi2(0x00000005, 1))
+        return 1;
+    if (test__ffssi2(0x0000000A, 2))
+        return 1;
+    if (test__ffssi2(0x10000000, 29))
+        return 1;
+    if (test__ffssi2(0x20000000, 30))
+        return 1;
+    if (test__ffssi2(0x60000000, 30))
+        return 1;
+    if (test__ffssi2(0x80000000u, 32))
+        return 1;
+
+   return 0;
+}
diff --git a/test/builtins/Unit/ffsti2_test.c b/test/builtins/Unit/ffsti2_test.c
index 396269d..3b312c4 100644
--- a/test/builtins/Unit/ffsti2_test.c
+++ b/test/builtins/Unit/ffsti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ffsti2_test.c - Test __ffsti2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixdfdi_test.c b/test/builtins/Unit/fixdfdi_test.c
index 4a7cfa3..d2ba7b1 100644
--- a/test/builtins/Unit/fixdfdi_test.c
+++ b/test/builtins/Unit/fixdfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixdfdi_test.c - Test __fixdfdi -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixdfsivfp_test.c b/test/builtins/Unit/fixdfsivfp_test.c
index c6102e2..33b4d24 100644
--- a/test/builtins/Unit/fixdfsivfp_test.c
+++ b/test/builtins/Unit/fixdfsivfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- fixdfsivfp_test.c - Test __fixdfsivfp -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -18,7 +20,7 @@
 
 extern int __fixdfsivfp(double a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__fixdfsivfp(double a)
 {
 	int actual = __fixdfsivfp(a);
@@ -32,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__fixdfsivfp(0.0))
         return 1;
     if (test__fixdfsivfp(1.0))
diff --git a/test/builtins/Unit/fixdfti_test.c b/test/builtins/Unit/fixdfti_test.c
index b5da456..0abe187 100644
--- a/test/builtins/Unit/fixdfti_test.c
+++ b/test/builtins/Unit/fixdfti_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixdfti_test.c - Test __fixdfti -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixsfdi_test.c b/test/builtins/Unit/fixsfdi_test.c
index f37ecef..468299f 100644
--- a/test/builtins/Unit/fixsfdi_test.c
+++ b/test/builtins/Unit/fixsfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixsfdi_test.c - Test __fixsfdi -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixsfsivfp_test.c b/test/builtins/Unit/fixsfsivfp_test.c
index 9abf5e8..ee33a1d 100644
--- a/test/builtins/Unit/fixsfsivfp_test.c
+++ b/test/builtins/Unit/fixsfsivfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- fixsfsivfp_test.c - Test __fixsfsivfp -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -18,7 +20,7 @@
 
 extern int __fixsfsivfp(float a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__fixsfsivfp(float a)
 {
 	int actual = __fixsfsivfp(a);
@@ -32,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__fixsfsivfp(0.0))
         return 1;
     if (test__fixsfsivfp(1.0))
diff --git a/test/builtins/Unit/fixsfti_test.c b/test/builtins/Unit/fixsfti_test.c
index 38748aa..ec4e8dd 100644
--- a/test/builtins/Unit/fixsfti_test.c
+++ b/test/builtins/Unit/fixsfti_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixsfti_test.c - Test __fixsfti -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixtfdi_test.c b/test/builtins/Unit/fixtfdi_test.c
index cc25bec..3cd1ebf 100644
--- a/test/builtins/Unit/fixtfdi_test.c
+++ b/test/builtins/Unit/fixtfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- fixtfdi_test.c - Test __fixtfdi ----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixtfsi_test.c b/test/builtins/Unit/fixtfsi_test.c
index 1da516b..59e4352 100644
--- a/test/builtins/Unit/fixtfsi_test.c
+++ b/test/builtins/Unit/fixtfsi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- fixtfsi_test.c - Test __fixtfsi ----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixtfti_test.c b/test/builtins/Unit/fixtfti_test.c
index 52184ca..4d3b56c 100644
--- a/test/builtins/Unit/fixtfti_test.c
+++ b/test/builtins/Unit/fixtfti_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- fixtfti_test.c - Test __fixtfti ----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunsdfdi_test.c b/test/builtins/Unit/fixunsdfdi_test.c
index 3998482..ab09bd0 100644
--- a/test/builtins/Unit/fixunsdfdi_test.c
+++ b/test/builtins/Unit/fixunsdfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunsdfdi_test.c - Test __fixunsdfdi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunsdfsi_test.c b/test/builtins/Unit/fixunsdfsi_test.c
index 8d3d630..7fbd9ee 100644
--- a/test/builtins/Unit/fixunsdfsi_test.c
+++ b/test/builtins/Unit/fixunsdfsi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunsdfsi_test.c - Test __fixunsdfsi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunsdfsivfp_test.c b/test/builtins/Unit/fixunsdfsivfp_test.c
index ebd0be2..b707992 100644
--- a/test/builtins/Unit/fixunsdfsivfp_test.c
+++ b/test/builtins/Unit/fixunsdfsivfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunsdfsivfp_test.c - Test __fixunsdfsivfp -----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI unsigned int __fixunsdfsivfp(double a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__fixunsdfsivfp(double a)
 {
     unsigned int actual = __fixunsdfsivfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__fixunsdfsivfp(0.0))
         return 1;
     if (test__fixunsdfsivfp(1.0))
diff --git a/test/builtins/Unit/fixunsdfti_test.c b/test/builtins/Unit/fixunsdfti_test.c
index 0298fb9..249d8f8 100644
--- a/test/builtins/Unit/fixunsdfti_test.c
+++ b/test/builtins/Unit/fixunsdfti_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunsdfti_test.c - Test __fixunsdfti -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunssfdi_test.c b/test/builtins/Unit/fixunssfdi_test.c
index 812457a..2d693eb 100644
--- a/test/builtins/Unit/fixunssfdi_test.c
+++ b/test/builtins/Unit/fixunssfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunssfdi_test.c - Test __fixunssfdi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunssfsi_test.c b/test/builtins/Unit/fixunssfsi_test.c
index 17293e4..3974b53 100644
--- a/test/builtins/Unit/fixunssfsi_test.c
+++ b/test/builtins/Unit/fixunssfsi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunssfsi_test.c - Test __fixunssfsi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunssfsivfp_test.c b/test/builtins/Unit/fixunssfsivfp_test.c
index c8e45f4..c1d8ed7 100644
--- a/test/builtins/Unit/fixunssfsivfp_test.c
+++ b/test/builtins/Unit/fixunssfsivfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- fixunssfsivfp_test.c - Test __fixunssfsivfp -----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -18,7 +20,7 @@
 
 extern unsigned int __fixunssfsivfp(float a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__fixunssfsivfp(float a)
 {
     unsigned int actual = __fixunssfsivfp(a);
@@ -32,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__fixunssfsivfp(0.0))
         return 1;
     if (test__fixunssfsivfp(1.0))
diff --git a/test/builtins/Unit/fixunssfti_test.c b/test/builtins/Unit/fixunssfti_test.c
index 979d661..fd2d108 100644
--- a/test/builtins/Unit/fixunssfti_test.c
+++ b/test/builtins/Unit/fixunssfti_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunssfti_test.c - Test __fixunssfti -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunstfdi_test.c b/test/builtins/Unit/fixunstfdi_test.c
index 817c59b..67fcc2f 100644
--- a/test/builtins/Unit/fixunstfdi_test.c
+++ b/test/builtins/Unit/fixunstfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunstfdi_test.c - Test __fixunstfdi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunstfsi_test.c b/test/builtins/Unit/fixunstfsi_test.c
index 13ed779..edf5422 100644
--- a/test/builtins/Unit/fixunstfsi_test.c
+++ b/test/builtins/Unit/fixunstfsi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- fixunstfsi_test.c - Test __fixunstfsi ----------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunstfti_test.c b/test/builtins/Unit/fixunstfti_test.c
index 60a0982..eaf4b8f 100644
--- a/test/builtins/Unit/fixunstfti_test.c
+++ b/test/builtins/Unit/fixunstfti_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunstfti_test.c - Test __fixunstfti -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -13,6 +14,8 @@
 
 #include <stdio.h>
 
+// UNSUPPORTED: mips
+
 #if __LDBL_MANT_DIG__ == 113
 
 #include "fp_test.h"
diff --git a/test/builtins/Unit/fixunsxfdi_test.c b/test/builtins/Unit/fixunsxfdi_test.c
index 6f42079..c5c27d3 100644
--- a/test/builtins/Unit/fixunsxfdi_test.c
+++ b/test/builtins/Unit/fixunsxfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunsxfdi_test.c - Test __fixunsxfdi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunsxfsi_test.c b/test/builtins/Unit/fixunsxfsi_test.c
index 0d78dcb..e0bed7e 100644
--- a/test/builtins/Unit/fixunsxfsi_test.c
+++ b/test/builtins/Unit/fixunsxfsi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixunsxfsi_test.c - Test __fixunsxfsi -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixunsxfti_test.c b/test/builtins/Unit/fixunsxfti_test.c
index 94b5aeb..0a48a73 100644
--- a/test/builtins/Unit/fixunsxfti_test.c
+++ b/test/builtins/Unit/fixunsxfti_test.c
@@ -1,3 +1,9 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+// XFAIL: aarch64
+// test fails for aarch64 (see pr32260)
+
+// UNSUPPORTED: mips
+
 //===-- fixunsxfti_test.c - Test __fixunsxfti -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixxfdi_test.c b/test/builtins/Unit/fixxfdi_test.c
index 0a90a56..40ad2b0 100644
--- a/test/builtins/Unit/fixxfdi_test.c
+++ b/test/builtins/Unit/fixxfdi_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- fixxfdi_test.c - Test __fixxfdi -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fixxfti_test.c b/test/builtins/Unit/fixxfti_test.c
index b8573cc..e5e15ab 100644
--- a/test/builtins/Unit/fixxfti_test.c
+++ b/test/builtins/Unit/fixxfti_test.c
@@ -1,3 +1,9 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+// XFAIL: aarch64
+// test fails for aarch64 (see pr32260)
+
+// UNSUPPORTED: mips
+
 //===-- fixxfti_test.c - Test __fixxfti -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatdidf_test.c b/test/builtins/Unit/floatdidf_test.c
index 9bf2be9..7742917 100644
--- a/test/builtins/Unit/floatdidf_test.c
+++ b/test/builtins/Unit/floatdidf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatdidf.c - Test __floatdidf ------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatdisf_test.c b/test/builtins/Unit/floatdisf_test.c
index a55c6a9..8299bb1 100644
--- a/test/builtins/Unit/floatdisf_test.c
+++ b/test/builtins/Unit/floatdisf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatdisf_test.c - Test __floatdisf -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatditf_test.c b/test/builtins/Unit/floatditf_test.c
index 8cf8a08..bdfb7f9 100644
--- a/test/builtins/Unit/floatditf_test.c
+++ b/test/builtins/Unit/floatditf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatditf_test.c - Test __floatditf -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatdixf_test.c b/test/builtins/Unit/floatdixf_test.c
index f6ab5a4..0a4ca3a 100644
--- a/test/builtins/Unit/floatdixf_test.c
+++ b/test/builtins/Unit/floatdixf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatdixf_test.c - Test __floatdixf -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatsidfvfp_test.c b/test/builtins/Unit/floatsidfvfp_test.c
index e5ea3a4..8a3c7fb 100644
--- a/test/builtins/Unit/floatsidfvfp_test.c
+++ b/test/builtins/Unit/floatsidfvfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatsidfvfp_test.c - Test __floatsidfvfp -------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI double __floatsidfvfp(int a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__floatsidfvfp(int a)
 {
     double actual = __floatsidfvfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__floatsidfvfp(0))
         return 1;
     if (test__floatsidfvfp(1))
diff --git a/test/builtins/Unit/floatsisfvfp_test.c b/test/builtins/Unit/floatsisfvfp_test.c
index ab21e2e..7c044b2 100644
--- a/test/builtins/Unit/floatsisfvfp_test.c
+++ b/test/builtins/Unit/floatsisfvfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatsisfvfp_test.c - Test __floatsisfvfp -------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __floatsisfvfp(int a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__floatsisfvfp(int a)
 {
     float actual = __floatsisfvfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__floatsisfvfp(0))
         return 1;
     if (test__floatsisfvfp(1))
diff --git a/test/builtins/Unit/floatsitf_test.c b/test/builtins/Unit/floatsitf_test.c
index 6f98721..f8d700b 100644
--- a/test/builtins/Unit/floatsitf_test.c
+++ b/test/builtins/Unit/floatsitf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- floatsitf_test.c - Test __floatsitf ------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floattidf_test.c b/test/builtins/Unit/floattidf_test.c
index 3af382a..9da8c5d 100644
--- a/test/builtins/Unit/floattidf_test.c
+++ b/test/builtins/Unit/floattidf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floattidf.c - Test __floattidf ------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floattisf_test.c b/test/builtins/Unit/floattisf_test.c
index 0f5dc54..9d7282c 100644
--- a/test/builtins/Unit/floattisf_test.c
+++ b/test/builtins/Unit/floattisf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floattisf_test.c - Test __floattisf -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floattitf_test.c b/test/builtins/Unit/floattitf_test.c
index 928b2e8..5aeb760 100644
--- a/test/builtins/Unit/floattitf_test.c
+++ b/test/builtins/Unit/floattitf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floattitf.c - Test __floattitf ------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floattixf_test.c b/test/builtins/Unit/floattixf_test.c
index d281deb..3de4729 100644
--- a/test/builtins/Unit/floattixf_test.c
+++ b/test/builtins/Unit/floattixf_test.c
@@ -1,3 +1,9 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+// XFAIL: aarch64
+// test fails for aarch64 (see pr32260)
+
+// UNSUPPORTED: mips
+
 //===-- floattixf.c - Test __floattixf ------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatundidf_test.c b/test/builtins/Unit/floatundidf_test.c
index 97fb1e5..d5d7419 100644
--- a/test/builtins/Unit/floatundidf_test.c
+++ b/test/builtins/Unit/floatundidf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatundidf_test.c - Test __floatundidf ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatundisf_test.c b/test/builtins/Unit/floatundisf_test.c
index 40b6bcc..898d886 100644
--- a/test/builtins/Unit/floatundisf_test.c
+++ b/test/builtins/Unit/floatundisf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatundisf_test.c - Test __floatundisf ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatunditf_test.c b/test/builtins/Unit/floatunditf_test.c
index b66a174..342dc27 100644
--- a/test/builtins/Unit/floatunditf_test.c
+++ b/test/builtins/Unit/floatunditf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatunditf_test.c - Test __floatunditf ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatundixf_test.c b/test/builtins/Unit/floatundixf_test.c
index 690dce1..47b4316 100644
--- a/test/builtins/Unit/floatundixf_test.c
+++ b/test/builtins/Unit/floatundixf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatundixf_test.c - Test __floatundixf ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatunsitf_test.c b/test/builtins/Unit/floatunsitf_test.c
index c3d3fe9..966a4fd 100644
--- a/test/builtins/Unit/floatunsitf_test.c
+++ b/test/builtins/Unit/floatunsitf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- floatunsitf_test.c - Test __floatunsitf --------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatunssidfvfp_test.c b/test/builtins/Unit/floatunssidfvfp_test.c
index 75e4bbd..7337557 100644
--- a/test/builtins/Unit/floatunssidfvfp_test.c
+++ b/test/builtins/Unit/floatunssidfvfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatunssidfvfp_test.c - Test __floatunssidfvfp -------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI double __floatunssidfvfp(unsigned int a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__floatunssidfvfp(unsigned int a)
 {
     double actual = __floatunssidfvfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__floatunssidfvfp(0))
         return 1;
     if (test__floatunssidfvfp(1))
diff --git a/test/builtins/Unit/floatunssisfvfp_test.c b/test/builtins/Unit/floatunssisfvfp_test.c
index 47f837c..9d7fb65 100644
--- a/test/builtins/Unit/floatunssisfvfp_test.c
+++ b/test/builtins/Unit/floatunssisfvfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatunssisfvfp_test.c - Test __floatunssisfvfp -------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -18,7 +19,7 @@
 
 extern COMPILER_RT_ABI float __floatunssisfvfp(unsigned int a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__floatunssisfvfp(unsigned int a)
 {
     float actual = __floatunssisfvfp(a);
@@ -32,7 +33,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__floatunssisfvfp(0))
         return 1;
     if (test__floatunssisfvfp(1))
diff --git a/test/builtins/Unit/floatuntidf_test.c b/test/builtins/Unit/floatuntidf_test.c
index 9855ff7..1bf19ba 100644
--- a/test/builtins/Unit/floatuntidf_test.c
+++ b/test/builtins/Unit/floatuntidf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatuntidf.c - Test __floatuntidf --------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatuntisf_test.c b/test/builtins/Unit/floatuntisf_test.c
index 9b5ff79..c7c11ba 100644
--- a/test/builtins/Unit/floatuntisf_test.c
+++ b/test/builtins/Unit/floatuntisf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatuntisf.c - Test __floatuntisf --------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatuntitf_test.c b/test/builtins/Unit/floatuntitf_test.c
index 495adcf..e81c30e 100644
--- a/test/builtins/Unit/floatuntitf_test.c
+++ b/test/builtins/Unit/floatuntitf_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- floatuntitf.c - Test __floatuntitf --------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/floatuntixf_test.c b/test/builtins/Unit/floatuntixf_test.c
index c58b55d..2d71f0f 100644
--- a/test/builtins/Unit/floatuntixf_test.c
+++ b/test/builtins/Unit/floatuntixf_test.c
@@ -1,3 +1,9 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+// XFAIL: aarch64
+// test fails for aarch64 (see pr32260)
+
+// UNSUPPORTED: mips
+
 //===-- floatuntixf.c - Test __floatuntixf --------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/fp_test.h b/test/builtins/Unit/fp_test.h
index 1f0e7be..781b7e2 100644
--- a/test/builtins/Unit/fp_test.h
+++ b/test/builtins/Unit/fp_test.h
@@ -85,7 +85,7 @@
     if (rep == expected){
         return 0;
     }
-    // test other posible NaN representation(signal NaN)
+    // test other possible NaN representation(signal NaN)
     else if (expected == 0x7e00U){
         if ((rep & 0x7c00U) == 0x7c00U &&
             (rep & 0x3ffU) > 0){
@@ -103,7 +103,7 @@
     if (rep == expected){
         return 0;
     }
-    // test other posible NaN representation(signal NaN)
+    // test other possible NaN representation(signal NaN)
     else if (expected == 0x7fc00000U){
         if ((rep & 0x7f800000U) == 0x7f800000U &&
             (rep & 0x7fffffU) > 0){
@@ -121,7 +121,7 @@
     if (rep == expected){
         return 0;
     }
-    // test other posible NaN representation(signal NaN)
+    // test other possible NaN representation(signal NaN)
     else if (expected == 0x7ff8000000000000UL){
         if ((rep & 0x7ff0000000000000UL) == 0x7ff0000000000000UL &&
             (rep & 0xfffffffffffffUL) > 0){
@@ -146,7 +146,7 @@
     if (hi == expectedHi && lo == expectedLo){
         return 0;
     }
-    // test other posible NaN representation(signal NaN)
+    // test other possible NaN representation(signal NaN)
     else if (expectedHi == 0x7fff800000000000UL && expectedLo == 0x0UL){
         if ((hi & 0x7fff000000000000UL) == 0x7fff000000000000UL &&
             ((hi & 0xffffffffffffUL) > 0 || lo > 0)){
diff --git a/test/builtins/Unit/gcc_personality_test.c b/test/builtins/Unit/gcc_personality_test.c
index f9598c6..b3345dd 100644
--- a/test/builtins/Unit/gcc_personality_test.c
+++ b/test/builtins/Unit/gcc_personality_test.c
@@ -1,3 +1,6 @@
+// FIXME: XFAIL as currently it cannot be built by lit properly.
+// XFAIL: *
+// RUN: %clangxx_builtins %s %librt -o %t && %run %t
 /* ===-- gcc_personality_test.c - Tests __gcc_personality_v0 -------------===
  *
  *                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/gedf2vfp_test.c b/test/builtins/Unit/gedf2vfp_test.c
index e280ce0..ad72083 100644
--- a/test/builtins/Unit/gedf2vfp_test.c
+++ b/test/builtins/Unit/gedf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- gedf2vfp_test.c - Test __gedf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __gedf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__gedf2vfp(double a, double b)
 {
     int actual = __gedf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__gedf2vfp(0.0, 0.0))
         return 1;
     if (test__gedf2vfp(1.0, 0.0))
diff --git a/test/builtins/Unit/gesf2vfp_test.c b/test/builtins/Unit/gesf2vfp_test.c
index aa53eb7..8a855e1 100644
--- a/test/builtins/Unit/gesf2vfp_test.c
+++ b/test/builtins/Unit/gesf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- gesf2vfp_test.c - Test __gesf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __gesf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__gesf2vfp(float a, float b)
 {
     int actual = __gesf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__gesf2vfp(0.0, 0.0))
         return 1;
     if (test__gesf2vfp(1.1, 1.0))
diff --git a/test/builtins/Unit/getf2_test.c b/test/builtins/Unit/getf2_test.c
index 9796b8a..115b630 100644
--- a/test/builtins/Unit/getf2_test.c
+++ b/test/builtins/Unit/getf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ getf2_test.c - Test __getf2------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/gtdf2vfp_test.c b/test/builtins/Unit/gtdf2vfp_test.c
index fd54e0b..e6eb545 100644
--- a/test/builtins/Unit/gtdf2vfp_test.c
+++ b/test/builtins/Unit/gtdf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- gtdf2vfp_test.c - Test __gtdf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __gtdf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__gtdf2vfp(double a, double b)
 {
     int actual = __gtdf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__gtdf2vfp(0.0, 0.0))
         return 1;
     if (test__gtdf2vfp(1.0, 0.0))
diff --git a/test/builtins/Unit/gtsf2vfp_test.c b/test/builtins/Unit/gtsf2vfp_test.c
index 2f4ad99..e0442c6 100644
--- a/test/builtins/Unit/gtsf2vfp_test.c
+++ b/test/builtins/Unit/gtsf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- gtsf2vfp_test.c - Test __gtsf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __gtsf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__gtsf2vfp(float a, float b)
 {
     int actual = __gtsf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__gtsf2vfp(0.0, 0.0))
         return 1;
     if (test__gtsf2vfp(1.0, 0.0))
diff --git a/test/builtins/Unit/gttf2_test.c b/test/builtins/Unit/gttf2_test.c
index 6508d4b..81d68cb 100644
--- a/test/builtins/Unit/gttf2_test.c
+++ b/test/builtins/Unit/gttf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ gttf2_test.c - Test __gttf2------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ledf2vfp_test.c b/test/builtins/Unit/ledf2vfp_test.c
index 5683590..f0cd56e 100644
--- a/test/builtins/Unit/ledf2vfp_test.c
+++ b/test/builtins/Unit/ledf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- ledf2vfp_test.c - Test __ledf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __ledf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__ledf2vfp(double a, double b)
 {
     int actual = __ledf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__ledf2vfp(0.0, 0.0))
         return 1;
     if (test__ledf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/lesf2vfp_test.c b/test/builtins/Unit/lesf2vfp_test.c
index b5c20f6..02ae182 100644
--- a/test/builtins/Unit/lesf2vfp_test.c
+++ b/test/builtins/Unit/lesf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- lesf2vfp_test.c - Test __lesf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __lesf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__lesf2vfp(float a, float b)
 {
     int actual = __lesf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__lesf2vfp(0.0, 0.0))
         return 1;
     if (test__lesf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/letf2_test.c b/test/builtins/Unit/letf2_test.c
index 1842e3c..bb84525 100644
--- a/test/builtins/Unit/letf2_test.c
+++ b/test/builtins/Unit/letf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ letf2_test.c - Test __letf2------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/lit.cfg b/test/builtins/Unit/lit.cfg
new file mode 100644
index 0000000..9e3a0d6
--- /dev/null
+++ b/test/builtins/Unit/lit.cfg
@@ -0,0 +1,88 @@
+# -*- Python -*-
+
+import os
+import platform
+
+import lit.formats
+
+def get_required_attr(config, attr_name):
+  attr_value = getattr(config, attr_name, None)
+  if attr_value == None:
+    lit_config.fatal(
+      "No attribute %r in test configuration! You may need to run "
+      "tests from your build directory or add this attribute "
+      "to lit.site.cfg " % attr_name)
+  return attr_value
+
+# Setup config name.
+config.name = 'Builtins' + config.name_suffix
+
+# Platform-specific default Builtins_OPTIONS for lit tests.
+default_builtins_opts = ''
+
+# Setup source root.
+config.test_source_root = os.path.dirname(__file__)
+
+# Path to the static library
+is_msvc = get_required_attr(config, "builtins_is_msvc")
+if is_msvc:
+  base_lib = os.path.join(config.compiler_rt_libdir, "clang_rt.builtins-%s.lib "
+                          % config.target_arch)
+  config.substitutions.append( ("%librt ", base_lib) )
+else:
+  base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins-%s.a"
+                          % config.target_arch)
+  config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') )
+
+builtins_source_dir = os.path.join(
+  get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins")
+builtins_lit_source_dir = get_required_attr(config, "builtins_lit_source_dir")
+
+extra_link_flags = ["-nodefaultlibs"]
+
+target_cflags = [get_required_attr(config, "target_cflags")]
+target_cflags += ['-fno-builtin', '-I', builtins_source_dir]
+target_cflags += extra_link_flags
+target_cxxflags = config.cxx_mode_flags + target_cflags
+clang_builtins_static_cflags = ([""] +
+                            config.debug_info_flags + target_cflags)
+clang_builtins_static_cxxflags = config.cxx_mode_flags + \
+                                 clang_builtins_static_cflags
+
+clang_builtins_cflags = clang_builtins_static_cflags
+clang_builtins_cxxflags = clang_builtins_static_cxxflags
+
+if not is_msvc:
+  config.available_features.add('c99-complex')
+
+config.available_features.add('not-android')
+clang_wrapper = ""
+
+def build_invocation(compile_flags):
+  return " " + " ".join([clang_wrapper, config.clang] + compile_flags) + " "
+
+
+target_arch = config.target_arch
+if (target_arch == "arm"):
+  target_arch = "armv7"
+
+config.substitutions.append( ("%clang ", build_invocation(target_cflags)) )
+config.substitutions.append( ("%clangxx ", build_invocation(target_cxxflags)) )
+config.substitutions.append( ("%clang_builtins ", \
+                              build_invocation(clang_builtins_cflags)))
+config.substitutions.append( ("%clangxx_builtins ", \
+                              build_invocation(clang_builtins_cxxflags)))
+
+# FIXME: move the call_apsr.s into call_apsr.h as inline-asm.
+# some ARM tests needs call_apsr.s
+call_apsr_source = os.path.join(builtins_lit_source_dir, 'arm', 'call_apsr.S')
+march_flag = '-march=' + target_arch
+call_apsr_flags = ['-c', march_flag, call_apsr_source]
+config.substitutions.append( ("%arm_call_apsr ", \
+                              build_invocation(call_apsr_flags)) )
+
+# Default test suffixes.
+config.suffixes = ['.c', '.cc', '.cpp']
+
+if not config.emulator:
+  config.available_features.add('native-run')
diff --git a/test/builtins/Unit/lit.site.cfg.in b/test/builtins/Unit/lit.site.cfg.in
new file mode 100644
index 0000000..4241bdc
--- /dev/null
+++ b/test/builtins/Unit/lit.site.cfg.in
@@ -0,0 +1,12 @@
+@LIT_SITE_CFG_IN_HEADER@
+
+config.name_suffix = "@BUILTINS_TEST_CONFIG_SUFFIX@"
+config.builtins_lit_source_dir = "@BUILTINS_LIT_SOURCE_DIR@/Unit"
+config.target_cflags = "@BUILTINS_TEST_TARGET_CFLAGS@"
+config.target_arch = "@BUILTINS_TEST_TARGET_ARCH@"
+config.builtins_is_msvc = @MSVC_PYBOOL@
+# Load common config for all compiler-rt lit tests.
+lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
+
+# Load tool-specific config that would do the real work.
+lit_config.load_config(config, "@BUILTINS_LIT_SOURCE_DIR@/Unit/lit.cfg")
diff --git a/test/builtins/Unit/lshrdi3_test.c b/test/builtins/Unit/lshrdi3_test.c
index d48ae4d..c5faa98 100644
--- a/test/builtins/Unit/lshrdi3_test.c
+++ b/test/builtins/Unit/lshrdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- lshrdi3_test.c - Test __lshrdi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/lshrti3_test.c b/test/builtins/Unit/lshrti3_test.c
index f5a0dd6..91356c8 100644
--- a/test/builtins/Unit/lshrti3_test.c
+++ b/test/builtins/Unit/lshrti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- lshrti3_test.c - Test __lshrti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ltdf2vfp_test.c b/test/builtins/Unit/ltdf2vfp_test.c
index 7319397..1edb319 100644
--- a/test/builtins/Unit/ltdf2vfp_test.c
+++ b/test/builtins/Unit/ltdf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- ltdf2vfp_test.c - Test __ltdf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __ltdf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__ltdf2vfp(double a, double b)
 {
     int actual = __ltdf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__ltdf2vfp(0.0, 0.0))
         return 1;
     if (test__ltdf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/ltsf2vfp_test.c b/test/builtins/Unit/ltsf2vfp_test.c
index 2d920c9..2fc0c11 100644
--- a/test/builtins/Unit/ltsf2vfp_test.c
+++ b/test/builtins/Unit/ltsf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- ltsf2vfp_test.c - Test __ltsf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __ltsf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__ltsf2vfp(float a, float b)
 {
     int actual = __ltsf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__ltsf2vfp(0.0, 0.0))
         return 1;
     if (test__ltsf2vfp(-1.0, 1.0))
diff --git a/test/builtins/Unit/lttf2_test.c b/test/builtins/Unit/lttf2_test.c
index e8f9dc1..cfe1906 100644
--- a/test/builtins/Unit/lttf2_test.c
+++ b/test/builtins/Unit/lttf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ lttf2_test.c - Test __lttf2------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/moddi3_test.c b/test/builtins/Unit/moddi3_test.c
index 62e8f22..8325ad7 100644
--- a/test/builtins/Unit/moddi3_test.c
+++ b/test/builtins/Unit/moddi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- moddi3_test.c - Test __moddi3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/modsi3_test.c b/test/builtins/Unit/modsi3_test.c
index 8c9f588..8075f51 100644
--- a/test/builtins/Unit/modsi3_test.c
+++ b/test/builtins/Unit/modsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 /* ===-- modsi3_test.c - Test __modsi3 -------------------------------------===
  *
  *                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/modti3_test.c b/test/builtins/Unit/modti3_test.c
index 99413aa..53fbf5b 100644
--- a/test/builtins/Unit/modti3_test.c
+++ b/test/builtins/Unit/modti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- modti3_test.c - Test __modti3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/muldc3_test.c b/test/builtins/Unit/muldc3_test.c
index 6902ef3..5a856bc 100644
--- a/test/builtins/Unit/muldc3_test.c
+++ b/test/builtins/Unit/muldc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
 //===-- muldc3_test.c - Test __muldc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -16,6 +17,8 @@
 #include <complex.h>
 #include <stdio.h>
 
+// REQUIRES: c99-complex
+
 // Returns: the product of a + ib and c + id
 
 COMPILER_RT_ABI double _Complex
diff --git a/test/builtins/Unit/muldf3vfp_test.c b/test/builtins/Unit/muldf3vfp_test.c
index 766972d..36a2262 100644
--- a/test/builtins/Unit/muldf3vfp_test.c
+++ b/test/builtins/Unit/muldf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- muldf3vfp_test.c - Test __muldf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -17,7 +18,7 @@
 #include <math.h>
 
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 extern COMPILER_RT_ABI double __muldf3vfp(double a, double b);
 
 int test__muldf3vfp(double a, double b)
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__muldf3vfp(0.5, 10.0))
         return 1;
     if (test__muldf3vfp(-0.5, -2.0))
diff --git a/test/builtins/Unit/muldi3_test.c b/test/builtins/Unit/muldi3_test.c
index 651dd01..d09e74d 100644
--- a/test/builtins/Unit/muldi3_test.c
+++ b/test/builtins/Unit/muldi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- muldi3_test.c - Test __muldi3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulodi4_test.c b/test/builtins/Unit/mulodi4_test.c
index 4546609..f03b8fe 100644
--- a/test/builtins/Unit/mulodi4_test.c
+++ b/test/builtins/Unit/mulodi4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- mulodi4_test.c - Test __mulodi4 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulosi4_test.c b/test/builtins/Unit/mulosi4_test.c
index 6a27d69..12913f1 100644
--- a/test/builtins/Unit/mulosi4_test.c
+++ b/test/builtins/Unit/mulosi4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- mulosi4_test.c - Test __mulosi4 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/muloti4_test.c b/test/builtins/Unit/muloti4_test.c
index d00e7bb..e7c78cf 100644
--- a/test/builtins/Unit/muloti4_test.c
+++ b/test/builtins/Unit/muloti4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- muloti4_test.c - Test __muloti4 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulsc3_test.c b/test/builtins/Unit/mulsc3_test.c
index eeb537a..46309c3 100644
--- a/test/builtins/Unit/mulsc3_test.c
+++ b/test/builtins/Unit/mulsc3_test.c
@@ -1,3 +1,6 @@
+// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
+// UNSUPPORTED: armhf-target-arch
+// see pr 32475.
 //===-- mulsc3_test.c - Test __mulsc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -16,6 +19,8 @@
 #include <complex.h>
 #include <stdio.h>
 
+// REQUIRES: c99-complex
+
 // Returns: the product of a + ib and c + id
 
 COMPILER_RT_ABI float _Complex
diff --git a/test/builtins/Unit/mulsf3vfp_test.c b/test/builtins/Unit/mulsf3vfp_test.c
index 5b0f6c1..8ee0551 100644
--- a/test/builtins/Unit/mulsf3vfp_test.c
+++ b/test/builtins/Unit/mulsf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- mulsf3vfp_test.c - Test __mulsf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __mulsf3vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__mulsf3vfp(float a, float b)
 {
     float actual = __mulsf3vfp(a, b);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__mulsf3vfp(0.5, 10.0))
         return 1;
     if (test__mulsf3vfp(-0.5, -2.0))
diff --git a/test/builtins/Unit/multc3_test.c b/test/builtins/Unit/multc3_test.c
index f6cf4ca..5ef8467 100644
--- a/test/builtins/Unit/multc3_test.c
+++ b/test/builtins/Unit/multc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- multc3_test.c - Test __multc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/multf3_test.c b/test/builtins/Unit/multf3_test.c
index 4214755..2bce707 100644
--- a/test/builtins/Unit/multf3_test.c
+++ b/test/builtins/Unit/multf3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- multf3_test.c - Test __multf3 ------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -15,6 +16,7 @@
 
 #if __LDBL_MANT_DIG__ == 113
 
+#include "int_lib.h"
 #include "fp_test.h"
 
 // Returns: a * b
diff --git a/test/builtins/Unit/multi3_test.c b/test/builtins/Unit/multi3_test.c
index 04b1b8a..8227f24 100644
--- a/test/builtins/Unit/multi3_test.c
+++ b/test/builtins/Unit/multi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- multi3_test.c - Test __multi3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulvdi3_test.c b/test/builtins/Unit/mulvdi3_test.c
index 7f16c4c..0e10bbe 100644
--- a/test/builtins/Unit/mulvdi3_test.c
+++ b/test/builtins/Unit/mulvdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- mulvdi3_test.c - Test __mulvdi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulvsi3_test.c b/test/builtins/Unit/mulvsi3_test.c
index 64df4fe..f62a5aa 100644
--- a/test/builtins/Unit/mulvsi3_test.c
+++ b/test/builtins/Unit/mulvsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- mulvsi3_test.c - Test __mulvsi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulvti3_test.c b/test/builtins/Unit/mulvti3_test.c
index bf2f731..36e96ad 100644
--- a/test/builtins/Unit/mulvti3_test.c
+++ b/test/builtins/Unit/mulvti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- mulvti3_test.c - Test __mulvti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/mulxc3_test.c b/test/builtins/Unit/mulxc3_test.c
index e77e94f..c48b0da 100644
--- a/test/builtins/Unit/mulxc3_test.c
+++ b/test/builtins/Unit/mulxc3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -lm -o %t && %run %t
 //===-- mulxc3_test.c - Test __mulxc3 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -18,6 +19,9 @@
 #include <complex.h>
 #include <stdio.h>
 
+// UNSUPPORTED: mips
+// REQUIRES: c99-complex
+
 // Returns: the product of a + ib and c + id
 
 COMPILER_RT_ABI long double _Complex
diff --git a/test/builtins/Unit/nedf2vfp_test.c b/test/builtins/Unit/nedf2vfp_test.c
index 2c44043..536917a 100644
--- a/test/builtins/Unit/nedf2vfp_test.c
+++ b/test/builtins/Unit/nedf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- nedf2vfp_test.c - Test __nedf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __nedf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__nedf2vfp(double a, double b)
 {
     int actual = __nedf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__nedf2vfp(0.0, 0.0))
         return 1;
     if (test__nedf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/negdf2vfp_test.c b/test/builtins/Unit/negdf2vfp_test.c
index f673b92..776dca6 100644
--- a/test/builtins/Unit/negdf2vfp_test.c
+++ b/test/builtins/Unit/negdf2vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negdf2vfp_test.c - Test __negdf2vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -17,7 +18,7 @@
 #include <math.h>
 
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 extern COMPILER_RT_ABI double __negdf2vfp(double a);
 
 int test__negdf2vfp(double a)
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__negdf2vfp(1.0))
         return 1;
     if (test__negdf2vfp(HUGE_VALF))
diff --git a/test/builtins/Unit/negdi2_test.c b/test/builtins/Unit/negdi2_test.c
index beccd71..c85e915 100644
--- a/test/builtins/Unit/negdi2_test.c
+++ b/test/builtins/Unit/negdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negdi2_test.c - Test __negdi2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/negsf2vfp_test.c b/test/builtins/Unit/negsf2vfp_test.c
index 9e47d89..e15e43c 100644
--- a/test/builtins/Unit/negsf2vfp_test.c
+++ b/test/builtins/Unit/negsf2vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negsf2vfp_test.c - Test __negsf2vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __negsf2vfp(float a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__negsf2vfp(float a)
 {
     float actual = __negsf2vfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__negsf2vfp(1.0))
         return 1;
     if (test__negsf2vfp(HUGE_VALF))
diff --git a/test/builtins/Unit/negti2_test.c b/test/builtins/Unit/negti2_test.c
index b075978..bb7379c 100644
--- a/test/builtins/Unit/negti2_test.c
+++ b/test/builtins/Unit/negti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negti2_test.c - Test __negti2 -------------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/negvdi2_test.c b/test/builtins/Unit/negvdi2_test.c
index 5c202e5..4e17c30 100644
--- a/test/builtins/Unit/negvdi2_test.c
+++ b/test/builtins/Unit/negvdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negvdi2_test.c - Test __negvdi2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/negvsi2_test.c b/test/builtins/Unit/negvsi2_test.c
index 6330803..3deb423 100644
--- a/test/builtins/Unit/negvsi2_test.c
+++ b/test/builtins/Unit/negvsi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negvsi2_test.c - Test __negvsi2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/negvti2_test.c b/test/builtins/Unit/negvti2_test.c
index 005f8a8..980f448 100644
--- a/test/builtins/Unit/negvti2_test.c
+++ b/test/builtins/Unit/negvti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- negvti2_test.c - Test __negvti2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/nesf2vfp_test.c b/test/builtins/Unit/nesf2vfp_test.c
index c085bf8..bb01490 100644
--- a/test/builtins/Unit/nesf2vfp_test.c
+++ b/test/builtins/Unit/nesf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- nesf2vfp_test.c - Test __nesf2vfp ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __nesf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__nesf2vfp(float a, float b)
 {
     int actual = __nesf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__nesf2vfp(0.0, 0.0))
         return 1;
     if (test__nesf2vfp(1.0, 1.0))
diff --git a/test/builtins/Unit/netf2_test.c b/test/builtins/Unit/netf2_test.c
index bbd953a..c0b839d 100644
--- a/test/builtins/Unit/netf2_test.c
+++ b/test/builtins/Unit/netf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ netf2_test.c - Test __netf2------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/paritydi2_test.c b/test/builtins/Unit/paritydi2_test.c
index 98220bd..cc56eda 100644
--- a/test/builtins/Unit/paritydi2_test.c
+++ b/test/builtins/Unit/paritydi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- paritydi2_test.c - Test __paritydi2 -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/paritysi2_test.c b/test/builtins/Unit/paritysi2_test.c
index 175aeb2..42d687f 100644
--- a/test/builtins/Unit/paritysi2_test.c
+++ b/test/builtins/Unit/paritysi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- paritysi2_test.c - Test __paritysi2 -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/parityti2_test.c b/test/builtins/Unit/parityti2_test.c
index cc1e999..bcd26d0 100644
--- a/test/builtins/Unit/parityti2_test.c
+++ b/test/builtins/Unit/parityti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- parityti2_test.c - Test __parityti2 -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/popcountdi2_test.c b/test/builtins/Unit/popcountdi2_test.c
index bfd4977..1d52fb8 100644
--- a/test/builtins/Unit/popcountdi2_test.c
+++ b/test/builtins/Unit/popcountdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- popcountdi2_test.c - Test __popcountdi2 ----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/popcountsi2_test.c b/test/builtins/Unit/popcountsi2_test.c
index 10b757d..5eb88ac 100644
--- a/test/builtins/Unit/popcountsi2_test.c
+++ b/test/builtins/Unit/popcountsi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- popcountsi2_test.c - Test __popcountsi2 ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/popcountti2_test.c b/test/builtins/Unit/popcountti2_test.c
index 3a3c3cb..ef8b2c3 100644
--- a/test/builtins/Unit/popcountti2_test.c
+++ b/test/builtins/Unit/popcountti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- popcountti2_test.c - Test __popcountti2 ----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/powidf2_test.c b/test/builtins/Unit/powidf2_test.c
index c499d9a..210e3c3 100644
--- a/test/builtins/Unit/powidf2_test.c
+++ b/test/builtins/Unit/powidf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- powidf2_test.cpp - Test __powidf2 ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/powisf2_test.c b/test/builtins/Unit/powisf2_test.c
index 1186ef4..add4be4 100644
--- a/test/builtins/Unit/powisf2_test.c
+++ b/test/builtins/Unit/powisf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- powisf2_test.cpp - Test __powisf2 ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/powitf2_test.c b/test/builtins/Unit/powitf2_test.c
index 13c890a..9d11b76 100644
--- a/test/builtins/Unit/powitf2_test.c
+++ b/test/builtins/Unit/powitf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- powitf2_test.cpp - Test __powitf2 ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/powixf2_test.c b/test/builtins/Unit/powixf2_test.c
index a28f1f9..bf5a812 100644
--- a/test/builtins/Unit/powixf2_test.c
+++ b/test/builtins/Unit/powixf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- powixf2_test.cpp - Test __powixf2 ---------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ppc/fixtfdi_test.c b/test/builtins/Unit/ppc/fixtfdi_test.c
index b4865fb..ea6c405 100644
--- a/test/builtins/Unit/ppc/fixtfdi_test.c
+++ b/test/builtins/Unit/ppc/fixtfdi_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdio.h>
 #include <limits.h>
 #include <stdint.h>
diff --git a/test/builtins/Unit/ppc/floatditf_test.c b/test/builtins/Unit/ppc/floatditf_test.c
index 71ecf7c..5c08ade 100644
--- a/test/builtins/Unit/ppc/floatditf_test.c
+++ b/test/builtins/Unit/ppc/floatditf_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdint.h>
 #include <stdio.h>
 
diff --git a/test/builtins/Unit/ppc/floatunditf_test.c b/test/builtins/Unit/ppc/floatunditf_test.c
index 4d1ce08..3e50128 100644
--- a/test/builtins/Unit/ppc/floatunditf_test.c
+++ b/test/builtins/Unit/ppc/floatunditf_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdint.h>
 #include <stdio.h>
 
diff --git a/test/builtins/Unit/ppc/qadd_test.c b/test/builtins/Unit/ppc/qadd_test.c
index 6d4ca93..327fd21 100644
--- a/test/builtins/Unit/ppc/qadd_test.c
+++ b/test/builtins/Unit/ppc/qadd_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdio.h>
 #include "DD.h"
 
diff --git a/test/builtins/Unit/ppc/qdiv_test.c b/test/builtins/Unit/ppc/qdiv_test.c
index 8e4e75a..7530e42 100644
--- a/test/builtins/Unit/ppc/qdiv_test.c
+++ b/test/builtins/Unit/ppc/qdiv_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdio.h>
 #include "DD.h"
 
diff --git a/test/builtins/Unit/ppc/qmul_test.c b/test/builtins/Unit/ppc/qmul_test.c
index fc5b46d..dbe3536 100644
--- a/test/builtins/Unit/ppc/qmul_test.c
+++ b/test/builtins/Unit/ppc/qmul_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdio.h>
 #include "DD.h"
 
diff --git a/test/builtins/Unit/ppc/qsub_test.c b/test/builtins/Unit/ppc/qsub_test.c
index 43bc7f4..e212240 100644
--- a/test/builtins/Unit/ppc/qsub_test.c
+++ b/test/builtins/Unit/ppc/qsub_test.c
@@ -1,3 +1,5 @@
+// REQUIRES: powerpc-registered-target
+// RUN: %clang_builtins %s -o %t && %run %t
 #include <stdio.h>
 #include "DD.h"
 
diff --git a/test/builtins/Unit/subdf3vfp_test.c b/test/builtins/Unit/subdf3vfp_test.c
index 6e8d5a1..75bfe45 100644
--- a/test/builtins/Unit/subdf3vfp_test.c
+++ b/test/builtins/Unit/subdf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- subdf3vfp_test.c - Test __subdf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -17,7 +18,7 @@
 #include <math.h>
 
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 extern COMPILER_RT_ABI double __subdf3vfp(double a, double b);
 
 int test__subdf3vfp(double a, double b)
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__subdf3vfp(1.0, 1.0))
         return 1;
     if (test__subdf3vfp(1234.567, 765.4321))
diff --git a/test/builtins/Unit/subsf3vfp_test.c b/test/builtins/Unit/subsf3vfp_test.c
index fe60058..fb3839f 100644
--- a/test/builtins/Unit/subsf3vfp_test.c
+++ b/test/builtins/Unit/subsf3vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- subsf3vfp_test.c - Test __subsf3vfp -------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __subsf3vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__subsf3vfp(float a, float b)
 {
     float actual = __subsf3vfp(a, b);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__subsf3vfp(1.0, 1.0))
         return 1;
     if (test__subsf3vfp(1234.567, 765.4321))
diff --git a/test/builtins/Unit/subtf3_test.c b/test/builtins/Unit/subtf3_test.c
index ad115a4..771242b 100644
--- a/test/builtins/Unit/subtf3_test.c
+++ b/test/builtins/Unit/subtf3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- subtf3_test.c - Test __subtf3 ------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -15,6 +16,7 @@
 
 #if __LDBL_MANT_DIG__ == 113
 
+#include "int_lib.h"
 #include "fp_test.h"
 
 // Returns: a - b
diff --git a/test/builtins/Unit/subvdi3_test.c b/test/builtins/Unit/subvdi3_test.c
index 96e825c..7606e27 100644
--- a/test/builtins/Unit/subvdi3_test.c
+++ b/test/builtins/Unit/subvdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- subvdi3_test.c - Test __subvdi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/subvsi3_test.c b/test/builtins/Unit/subvsi3_test.c
index 03ef504..f52a12b 100644
--- a/test/builtins/Unit/subvsi3_test.c
+++ b/test/builtins/Unit/subvsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- subvsi3_test.c - Test __subvsi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/subvti3_test.c b/test/builtins/Unit/subvti3_test.c
index 40eb518..66806ba 100644
--- a/test/builtins/Unit/subvti3_test.c
+++ b/test/builtins/Unit/subvti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- subvti3_test.c - Test __subvti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/trampoline_setup_test.c b/test/builtins/Unit/trampoline_setup_test.c
index dc30fb6..b8c3eae 100644
--- a/test/builtins/Unit/trampoline_setup_test.c
+++ b/test/builtins/Unit/trampoline_setup_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -fnested-functions -o %t && %run %t
 /* ===-- trampoline_setup_test.c - Test __trampoline_setup -----------------===
  *
  *                     The LLVM Compiler Infrastructure
@@ -12,7 +13,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdint.h>
-#include <sys/mman.h>
 
 /*
  * Tests nested functions
diff --git a/test/builtins/Unit/truncdfhf2_test.c b/test/builtins/Unit/truncdfhf2_test.c
index 6627a00..b172811 100644
--- a/test/builtins/Unit/truncdfhf2_test.c
+++ b/test/builtins/Unit/truncdfhf2_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===--------------- truncdfhf2_test.c - Test __truncdfhf2 ----------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/truncdfsf2_test.c b/test/builtins/Unit/truncdfsf2_test.c
index a208a3a..04bebf4 100644
--- a/test/builtins/Unit/truncdfsf2_test.c
+++ b/test/builtins/Unit/truncdfsf2_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===--------------- truncdfsf2_test.c - Test __truncdfsf2 ----------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/truncdfsf2vfp_test.c b/test/builtins/Unit/truncdfsf2vfp_test.c
index eaeda65..f034dd2 100644
--- a/test/builtins/Unit/truncdfsf2vfp_test.c
+++ b/test/builtins/Unit/truncdfsf2vfp_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- truncdfsf2vfp_test.c - Test __truncdfsf2vfp -----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +20,7 @@
 
 extern COMPILER_RT_ABI float __truncdfsf2vfp(double a);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__truncdfsf2vfp(double a)
 {
     float actual = __truncdfsf2vfp(a);
@@ -33,7 +34,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__truncdfsf2vfp(0.0))
         return 1;
     if (test__truncdfsf2vfp(1.0))
diff --git a/test/builtins/Unit/truncsfhf2_test.c b/test/builtins/Unit/truncsfhf2_test.c
index 5bc3c8e..2240c14 100644
--- a/test/builtins/Unit/truncsfhf2_test.c
+++ b/test/builtins/Unit/truncsfhf2_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===--------------- truncsfhf2_test.c - Test __truncsfhf2 ----------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/trunctfdf2_test.c b/test/builtins/Unit/trunctfdf2_test.c
index 0366a8c..1d8c2bf 100644
--- a/test/builtins/Unit/trunctfdf2_test.c
+++ b/test/builtins/Unit/trunctfdf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-------------- trunctfdf2_test.c - Test __trunctfdf2 -----------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/trunctfsf2_test.c b/test/builtins/Unit/trunctfsf2_test.c
index a6b922c..1775083 100644
--- a/test/builtins/Unit/trunctfsf2_test.c
+++ b/test/builtins/Unit/trunctfsf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===--------------- trunctfsf2_test.c - Test __trunctfsf2 ----------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ucmpdi2_test.c b/test/builtins/Unit/ucmpdi2_test.c
index 65ae4fc..ee81545 100644
--- a/test/builtins/Unit/ucmpdi2_test.c
+++ b/test/builtins/Unit/ucmpdi2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ucmpdi2_test.c - Test __ucmpdi2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/ucmpti2_test.c b/test/builtins/Unit/ucmpti2_test.c
index 826cd64..17a857f 100644
--- a/test/builtins/Unit/ucmpti2_test.c
+++ b/test/builtins/Unit/ucmpti2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- ucmpti2_test.c - Test __ucmpti2 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/udivdi3_test.c b/test/builtins/Unit/udivdi3_test.c
index 48c99e3..5858bc7 100644
--- a/test/builtins/Unit/udivdi3_test.c
+++ b/test/builtins/Unit/udivdi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- udivdi3_test.c - Test __udivdi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/udivmoddi4_test.c b/test/builtins/Unit/udivmoddi4_test.c
index 79af1ee..a5024ba 100644
--- a/test/builtins/Unit/udivmoddi4_test.c
+++ b/test/builtins/Unit/udivmoddi4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- udivmoddi4_test.c - Test __udivmoddi4 -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/udivmodsi4_test.c b/test/builtins/Unit/udivmodsi4_test.c
index 4c14e29..320018c 100644
--- a/test/builtins/Unit/udivmodsi4_test.c
+++ b/test/builtins/Unit/udivmodsi4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- udivmodsi4_test.c - Test __udivmodsi4 -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/udivmodti4_test.c b/test/builtins/Unit/udivmodti4_test.c
index c424661..b07ce8c 100644
--- a/test/builtins/Unit/udivmodti4_test.c
+++ b/test/builtins/Unit/udivmodti4_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- udivmodti4_test.c - Test __udivmodti4 -----------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/udivsi3_test.c b/test/builtins/Unit/udivsi3_test.c
index 4905386..7adf30a 100644
--- a/test/builtins/Unit/udivsi3_test.c
+++ b/test/builtins/Unit/udivsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- udivsi3_test.c - Test __udivsi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/udivti3_test.c b/test/builtins/Unit/udivti3_test.c
index f24ff03..81cedad 100644
--- a/test/builtins/Unit/udivti3_test.c
+++ b/test/builtins/Unit/udivti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- udivti3_test.c - Test __udivti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/umoddi3_test.c b/test/builtins/Unit/umoddi3_test.c
index b46fb40..b1382b6 100644
--- a/test/builtins/Unit/umoddi3_test.c
+++ b/test/builtins/Unit/umoddi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- umoddi3_test.c - Test __umoddi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/umodsi3_test.c b/test/builtins/Unit/umodsi3_test.c
index 3655da1..c430538 100644
--- a/test/builtins/Unit/umodsi3_test.c
+++ b/test/builtins/Unit/umodsi3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- umodsi3_test.c - Test __umodsi3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/umodti3_test.c b/test/builtins/Unit/umodti3_test.c
index 21e82a4..5bce025 100644
--- a/test/builtins/Unit/umodti3_test.c
+++ b/test/builtins/Unit/umodti3_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===-- umodti3_test.c - Test __umodti3 -----------------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/builtins/Unit/unorddf2vfp_test.c b/test/builtins/Unit/unorddf2vfp_test.c
index d49d567..21938d0 100644
--- a/test/builtins/Unit/unorddf2vfp_test.c
+++ b/test/builtins/Unit/unorddf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- unorddf2vfp_test.c - Test __unorddf2vfp ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __unorddf2vfp(double a, double b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__unorddf2vfp(double a, double b)
 {
     int actual = __unorddf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__unorddf2vfp(0.0, NAN))
         return 1;
     if (test__unorddf2vfp(NAN, 1.0))
diff --git a/test/builtins/Unit/unordsf2vfp_test.c b/test/builtins/Unit/unordsf2vfp_test.c
index 3cadc81..7126652 100644
--- a/test/builtins/Unit/unordsf2vfp_test.c
+++ b/test/builtins/Unit/unordsf2vfp_test.c
@@ -1,3 +1,5 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
+
 //===-- unordsf2vfp_test.c - Test __unordsf2vfp ---------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -19,7 +21,7 @@
 
 extern int __unordsf2vfp(float a, float b);
 
-#if __arm__
+#if __arm__ && __VFP_FP__
 int test__unordsf2vfp(float a, float b)
 {
     int actual = __unordsf2vfp(a, b);
@@ -33,7 +35,7 @@
 
 int main()
 {
-#if __arm__
+#if __arm__ && __VFP_FP__
     if (test__unordsf2vfp(0.0, NAN))
         return 1;
     if (test__unordsf2vfp(NAN, 1.0))
diff --git a/test/builtins/Unit/unordtf2_test.c b/test/builtins/Unit/unordtf2_test.c
index 114cd8c..22907ce 100644
--- a/test/builtins/Unit/unordtf2_test.c
+++ b/test/builtins/Unit/unordtf2_test.c
@@ -1,3 +1,4 @@
+// RUN: %clang_builtins %s %librt -o %t && %run %t
 //===------------ unordtf2_test.c - Test __unordtf2------------------------===//
 //
 //                     The LLVM Compiler Infrastructure
diff --git a/test/cfi/CMakeLists.txt b/test/cfi/CMakeLists.txt
index bd51eac..fb45f2f 100644
--- a/test/cfi/CMakeLists.txt
+++ b/test/cfi/CMakeLists.txt
@@ -1,14 +1,48 @@
-set(CFI_LIT_TEST_MODE Standalone)
-configure_lit_site_cfg(
-  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
-  ${CMAKE_CURRENT_BINARY_DIR}/Standalone/lit.site.cfg
-  )
+set(CFI_TESTSUITES)
 
-set(CFI_LIT_TEST_MODE Devirt)
-configure_lit_site_cfg(
-  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
-  ${CMAKE_CURRENT_BINARY_DIR}/Devirt/lit.site.cfg
-  )
+macro (add_cfi_test_suites lld thinlto)
+  set(suffix)
+  if (${lld})
+    set(suffix ${suffix}-lld)
+  endif()
+  if (${thinlto})
+    set(suffix ${suffix}-thinlto)
+  endif()
+
+  set(CFI_TEST_USE_LLD ${lld})
+  set(CFI_TEST_USE_THINLTO ${thinlto})
+
+  set(CFI_LIT_TEST_MODE Standalone)
+  set(CFI_TEST_CONFIG_SUFFIX -standalone${suffix})
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/Standalone${suffix}/lit.site.cfg
+    )
+  list(APPEND CFI_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/Standalone${suffix})
+
+  set(CFI_LIT_TEST_MODE Devirt)
+  set(CFI_TEST_CONFIG_SUFFIX -devirt${suffix})
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/Devirt${suffix}/lit.site.cfg
+    )
+  list(APPEND CFI_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/Devirt${suffix})
+endmacro()
+
+if (APPLE)
+  # FIXME: enable ThinLTO tests after fixing http://llvm.org/pr32741
+  add_cfi_test_suites(False False)
+elseif(WIN32)
+  # FIXME: enable ThinLTO tests after fixing http://llvm.org/pr32770
+  add_cfi_test_suites(True False)
+else()
+  add_cfi_test_suites(False False)
+  add_cfi_test_suites(False True)
+  if (COMPILER_RT_HAS_LLD)
+    add_cfi_test_suites(True False)
+    add_cfi_test_suites(True True)
+  endif()
+endif()
 
 set(CFI_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
 list(APPEND CFI_TEST_DEPS
@@ -34,7 +68,7 @@
       LTO
     )
   endif()
-  if(WIN32 AND COMPILER_RT_HAS_LLD_SOURCES)
+  if(NOT APPLE AND COMPILER_RT_HAS_LLD)
     list(APPEND CFI_TEST_DEPS
       lld
     )
@@ -42,13 +76,11 @@
 endif()
 
 add_lit_testsuite(check-cfi "Running the cfi regression tests"
-  ${CMAKE_CURRENT_BINARY_DIR}/Standalone
-  ${CMAKE_CURRENT_BINARY_DIR}/Devirt
+  ${CFI_TESTSUITES}
   DEPENDS ${CFI_TEST_DEPS})
 
 add_lit_target(check-cfi-and-supported "Running the cfi regression tests"
-  ${CMAKE_CURRENT_BINARY_DIR}/Standalone
-  ${CMAKE_CURRENT_BINARY_DIR}/Devirt
+  ${CFI_TESTSUITES}
   PARAMS check_supported=1
   DEPENDS ${CFI_TEST_DEPS})
 
diff --git a/test/cfi/bad-split.cpp b/test/cfi/bad-split.cpp
new file mode 100644
index 0000000..53504bd
--- /dev/null
+++ b/test/cfi/bad-split.cpp
@@ -0,0 +1,21 @@
+// GlobalSplit used to lose type metadata for classes with virtual bases but no virtual methods.
+// RUN: %clangxx_cfi -o %t1 %s && %t1
+
+// UNSUPPORTED: win32
+
+struct Z {
+};
+
+struct ZZ : public virtual Z {
+};
+
+struct A : public ZZ {
+};
+
+struct B : public A {
+};
+
+int main() {
+  A* a = new B();
+  B *b = (B*)a;
+}
diff --git a/test/cfi/create-derivers.test b/test/cfi/create-derivers.test
index a67562b..8b569d0 100644
--- a/test/cfi/create-derivers.test
+++ b/test/cfi/create-derivers.test
@@ -1,20 +1,21 @@
 REQUIRES: asserts
 
-RUN: %clangxx_cfi -c -o %t1.o %S/simple-fail.cpp
+%% Explicit -flto to override possible -flto=thin in %clangxx_cfi
+RUN: %clangxx_cfi -flto -c -o %t1.o %S/simple-fail.cpp
 RUN: opt -lowertypetests -debug-only=lowertypetests -o /dev/null %t1.o 2>&1 | FileCheck --check-prefix=B0 %s
 B0: {{1B|B@@}}: {{.*}} size 1
 
-RUN: %clangxx_cfi -DB32 -c -o %t2.o %S/simple-fail.cpp
+RUN: %clangxx_cfi -DB32 -flto -c -o %t2.o %S/simple-fail.cpp
 RUN: opt -lowertypetests -debug-only=lowertypetests -o /dev/null %t2.o 2>&1 | FileCheck --check-prefix=B32 %s
 B32: {{1B|B@@}}: {{.*}} size 24
 B32-NOT: all-ones
 
-RUN: %clangxx_cfi -DB64 -c -o %t3.o %S/simple-fail.cpp
+RUN: %clangxx_cfi -DB64 -flto -c -o %t3.o %S/simple-fail.cpp
 RUN: opt -lowertypetests -debug-only=lowertypetests -o /dev/null %t3.o 2>&1 | FileCheck --check-prefix=B64 %s
 B64: {{1B|B@@}}: {{.*}} size 54
 B64-NOT: all-ones
 
-RUN: %clangxx_cfi -DBM -c -o %t4.o %S/simple-fail.cpp
+RUN: %clangxx_cfi -DBM -flto -c -o %t4.o %S/simple-fail.cpp
 RUN: opt -lowertypetests -debug-only=lowertypetests -o /dev/null %t4.o 2>&1 | FileCheck --check-prefix=BM %s
 BM: {{1B|B@@}}: {{.*}} size 84
 BM-NOT: all-ones
diff --git a/test/cfi/cross-dso/dlopen.cpp b/test/cfi/cross-dso/icall/dlopen.cpp
similarity index 99%
rename from test/cfi/cross-dso/dlopen.cpp
rename to test/cfi/cross-dso/icall/dlopen.cpp
index ee4dae2..d238a7a 100644
--- a/test/cfi/cross-dso/dlopen.cpp
+++ b/test/cfi/cross-dso/icall/dlopen.cpp
@@ -55,7 +55,7 @@
 
 #ifdef SHARED_LIB
 
-#include "../utils.h"
+#include "../../utils.h"
 struct B {
   virtual void f();
 };
diff --git a/test/cfi/cross-dso/stats.cpp b/test/cfi/cross-dso/stats.cpp
index 6566ea2..975a1ff 100644
--- a/test/cfi/cross-dso/stats.cpp
+++ b/test/cfi/cross-dso/stats.cpp
@@ -3,6 +3,9 @@
 // RUN: env SANITIZER_STATS_PATH=%t.stats %t
 // RUN: sanstats %t.stats | FileCheck %s
 
+// CFI-icall is not implemented in thinlto mode => ".cfi" suffixes are missing
+// in sanstats output.
+
 struct ABase {};
 
 struct A : ABase {
diff --git a/test/cfi/icall/wrong-signature-mixed-lto.c b/test/cfi/icall/wrong-signature-mixed-lto.c
new file mode 100644
index 0000000..0e5fb85
--- /dev/null
+++ b/test/cfi/icall/wrong-signature-mixed-lto.c
@@ -0,0 +1,41 @@
+// Test that the checking is done with the actual type of f() even when the
+// calling module has an incorrect declaration. Test a mix of lto types.
+//
+// -flto below overrides -flto=thin in %clang_cfi
+// RUN: %clang_cfi %s -DMODULE_A -c -o %t1_a.o
+// RUN: %clang_cfi %s -DMODULE_B -c -o %t1_b.o -flto
+// RUN: %clang_cfi %t1_a.o %t1_b.o -o %t1
+// RUN: %expect_crash %t1 2>&1 | FileCheck --check-prefix=CFI %s
+//
+// RUN: %clang_cfi %s -DMODULE_A -c -o %t2_a.o -flto
+// RUN: %clang_cfi %s -DMODULE_B -c -o %t2_b.o
+// RUN: %clang_cfi %t2_a.o %t2_b.o -o %t2
+// RUN: %expect_crash %t2 2>&1 | FileCheck --check-prefix=CFI %s
+//
+// RUN: %clang_cfi %s -DMODULE_A -c -o %t3_a.o
+// RUN: %clang_cfi %s -DMODULE_B -c -o %t3_b.o
+// RUN: %clang_cfi %t3_a.o %t3_b.o -o %t3
+// RUN: %expect_crash %t3 2>&1 | FileCheck --check-prefix=CFI %s
+//
+// REQUIRES: thinlto
+
+#include <stdio.h>
+
+#if defined(MODULE_B)
+int f() {
+  return 42;
+}
+#elif defined(MODULE_A)
+void f();
+
+int main() {
+  // CFI: 1
+  fprintf(stderr, "1\n");
+
+  void (*volatile p)() = &f;
+  p();
+
+  // CFI-NOT: 2
+  fprintf(stderr, "2\n");
+}
+#endif
diff --git a/test/cfi/lit.cfg b/test/cfi/lit.cfg
index 3c02506..314ba5c 100644
--- a/test/cfi/lit.cfg
+++ b/test/cfi/lit.cfg
@@ -1,7 +1,7 @@
 import lit.formats
 import os
 
-config.name = 'cfi'
+config.name = 'cfi' + config.name_suffix
 config.suffixes = ['.c', '.cpp', '.test']
 config.test_source_root = os.path.dirname(__file__)
 
@@ -10,7 +10,7 @@
 config.substitutions.append((r"%clang ", ' '.join([config.clang]) + ' '))
 config.substitutions.append((r"%clangxx ", clangxx + ' '))
 if config.lto_supported:
-  clang_cfi = ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=cfi '])
+  clang_cfi = ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-fsanitize=cfi '])
 
   if config.cfi_lit_test_mode == "Devirt":
     config.available_features.add('devirt')
diff --git a/test/cfi/lit.site.cfg.in b/test/cfi/lit.site.cfg.in
index 87e5b51..63611f6 100644
--- a/test/cfi/lit.site.cfg.in
+++ b/test/cfi/lit.site.cfg.in
@@ -1,6 +1,9 @@
 @LIT_SITE_CFG_IN_HEADER@
 
+config.name_suffix = "@CFI_TEST_CONFIG_SUFFIX@"
 config.cfi_lit_test_mode = "@CFI_LIT_TEST_MODE@"
+config.use_lld = @CFI_TEST_USE_LLD@
+config.use_thinlto = @CFI_TEST_USE_THINLTO@
 
 lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
 lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg")
diff --git a/test/cfi/sibling.cpp b/test/cfi/sibling.cpp
index 9f32302..6013598 100644
--- a/test/cfi/sibling.cpp
+++ b/test/cfi/sibling.cpp
@@ -15,7 +15,7 @@
 // RUN: %clangxx -o %t5 %s
 // RUN: %t5 2>&1 | FileCheck --check-prefix=NCFI %s
 
-// Tests that the CFI enforcement distinguishes betwen non-overriding siblings.
+// Tests that the CFI enforcement distinguishes between non-overriding siblings.
 // XFAILed as not implemented yet.
 
 #include <stdio.h>
diff --git a/test/dfsan/custom.cc b/test/dfsan/custom.cc
index c96d940..b36db01 100644
--- a/test/dfsan/custom.cc
+++ b/test/dfsan/custom.cc
@@ -3,7 +3,7 @@
 // RUN: %clang_dfsan -DSTRICT_DATA_DEPENDENCIES %s -o %t && %run %t
 // RUN: %clang_dfsan -DSTRICT_DATA_DEPENDENCIES -mllvm -dfsan-args-abi %s -o %t && %run %t
 
-// XFAIL: target-is-mips64el
+// XFAIL: target-is-mips64,target-is-mips64el
 
 // Tests custom implementations of various glibc functions.
 
diff --git a/test/esan/TestCases/workingset-midreport.cpp b/test/esan/TestCases/workingset-midreport.cpp
index 2c29cf4..38c3765 100644
--- a/test/esan/TestCases/workingset-midreport.cpp
+++ b/test/esan/TestCases/workingset-midreport.cpp
@@ -4,6 +4,9 @@
 // RUN: %clang -O0 %s -o %t 2>&1
 // RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ESAN
 
+// FIXME: Re-enable once PR33590 is fixed.
+// UNSUPPORTED: x86_64
+
 #include <sanitizer/esan_interface.h>
 #include <sched.h>
 #include <stdio.h>
diff --git a/test/esan/TestCases/workingset-samples.cpp b/test/esan/TestCases/workingset-samples.cpp
index cf198d2..d97b62b 100644
--- a/test/esan/TestCases/workingset-samples.cpp
+++ b/test/esan/TestCases/workingset-samples.cpp
@@ -1,6 +1,9 @@
 // RUN: %clang_esan_wset -O0 %s -o %t 2>&1
 // RUN: %run %t 2>&1 | FileCheck %s
 
+// FIXME: Re-enable once PR33590 is fixed.
+// UNSUPPORTED: x86_64
+
 #include <sanitizer/esan_interface.h>
 #include <sched.h>
 #include <stdlib.h>
@@ -8,7 +11,6 @@
 #include <sys/mman.h>
 
 const int size = 0x1 << 25; // 523288 cache lines
-const int iters = 6;
 
 int main(int argc, char **argv) {
   char *buf = (char *)mmap(0, size, PROT_READ | PROT_WRITE,
diff --git a/test/esan/TestCases/workingset-simple.cpp b/test/esan/TestCases/workingset-simple.cpp
index c8a2d52..f1ac2ec 100644
--- a/test/esan/TestCases/workingset-simple.cpp
+++ b/test/esan/TestCases/workingset-simple.cpp
@@ -1,6 +1,9 @@
 // RUN: %clang_esan_wset -O0 %s -o %t 2>&1
 // RUN: %run %t 2>&1 | FileCheck %s
 
+// FIXME: Re-enable once PR33590 is fixed.
+// UNSUPPORTED: x86_64
+
 #include <stdlib.h>
 #include <string.h>
 #include <sys/mman.h>
diff --git a/test/lit.common.cfg b/test/lit.common.cfg
index 8d0c740..5f89000 100644
--- a/test/lit.common.cfg
+++ b/test/lit.common.cfg
@@ -11,8 +11,19 @@
 import lit.formats
 import lit.util
 
-# Setup test format. Use bash on Unix and the lit shell on Windows.
-execute_external = (not sys.platform in ['win32'])
+
+# Choose between lit's internal shell pipeline runner and a real shell.  If
+# LIT_USE_INTERNAL_SHELL is in the environment, we use that as an override.
+use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
+if use_lit_shell:
+    # 0 is external, "" is default, and everything else is internal.
+    execute_external = (use_lit_shell == "0")
+else:
+    # Otherwise we default to internal on Windows and external elsewhere, as
+    # bash on Windows is usually very slow.
+    execute_external = (not sys.platform in ['win32'])
+
+# Setup test format.
 config.test_format = lit.formats.ShTest(execute_external)
 if execute_external:
   config.available_features.add('shell')
@@ -88,14 +99,24 @@
 # Allow tests to be executed on a simulator or remotely.
 if config.emulator:
   config.substitutions.append( ('%run', config.emulator) )
+  config.substitutions.append( ('%env ', "env ") )
+  config.compile_wrapper = ""
 elif config.ios:
+  config.available_features.add('ios')
+
   device_id_env = "SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER" if config.iossim else "SANITIZER_IOS_TEST_DEVICE_IDENTIFIER"
   if device_id_env in os.environ: config.environment[device_id_env] = os.environ[device_id_env]
   ios_commands_dir = os.path.join(config.compiler_rt_src_root, "test", "sanitizer_common", "ios_commands")
   run_wrapper = os.path.join(ios_commands_dir, "iossim_run.py" if config.iossim else "ios_run.py")
   config.substitutions.append(('%run', run_wrapper))
+  env_wrapper = os.path.join(ios_commands_dir, "iossim_env.py" if config.iossim else "ios_env.py")
+  config.substitutions.append(('%env ', env_wrapper + " "))
+  compile_wrapper = os.path.join(ios_commands_dir, "iossim_compile.py" if config.iossim else "ios_compile.py")
+  config.compile_wrapper = compile_wrapper
 else:
   config.substitutions.append( ('%run', "") )
+  config.substitutions.append( ('%env ', "env ") )
+  config.compile_wrapper = ""
 
 # Define CHECK-%os to check for OS-dependent output.
 config.substitutions.append( ('CHECK-%os', ("CHECK-" + config.host_os)))
@@ -130,6 +151,9 @@
   config.available_features.add('cxxabi')
 
 if config.has_lld:
+  config.available_features.add('lld-available')
+
+if config.use_lld:
   config.available_features.add('lld')
 
 if config.can_symbolize:
@@ -181,6 +205,9 @@
   return os.path.exists(os.path.join(config.llvm_shlib_dir, 'libLTO.dylib'))
 
 def is_linux_lto_supported():
+  if config.use_lld:
+    return True
+
   if not os.path.exists(os.path.join(config.llvm_shlib_dir, 'LLVMgold.so')):
     return False
 
@@ -203,16 +230,25 @@
 elif config.host_os == 'Linux' and is_linux_lto_supported():
   config.lto_supported = True
   config.lto_launch = []
-  config.lto_flags = ["-fuse-ld=gold"]
+  if config.use_lld:
+    config.lto_flags = ["-fuse-ld=lld"]
+  else:
+    config.lto_flags = ["-fuse-ld=gold"]
 elif config.host_os == 'Windows' and is_windows_lto_supported():
   config.lto_supported = True
   config.lto_launch = []
-  config.lto_flags = ["-fuse-ld=lld"]
+  # FIXME: Remove -nopdb when PDB writing is ready.
+  config.lto_flags = ["-fuse-ld=lld -Wl,-nopdb"]
 else:
   config.lto_supported = False
 
 if config.lto_supported:
   config.available_features.add('lto')
+  if config.use_thinlto:
+    config.available_features.add('thinlto')
+    config.lto_flags += ["-flto=thin"]
+  else:
+    config.lto_flags += ["-flto"]
 
 # Ask llvm-config about assertion mode.
 try:
diff --git a/test/lit.common.configured.in b/test/lit.common.configured.in
index 685aa01..dc3081d 100644
--- a/test/lit.common.configured.in
+++ b/test/lit.common.configured.in
@@ -28,8 +28,10 @@
 set_default("ios", False)
 set_default("iossim", False)
 set_default("sanitizer_can_use_cxxabi", @SANITIZER_CAN_USE_CXXABI_PYBOOL@)
-set_default("has_lld", @COMPILER_RT_HAS_LLD_SOURCES_PYBOOL@)
+set_default("has_lld", @COMPILER_RT_HAS_LLD_PYBOOL@)
 set_default("can_symbolize", @CAN_SYMBOLIZE@)
+set_default("use_lld", False)
+set_default("use_thinlto", False)
 config.available_features.add('target-is-%s' % config.target_arch)
 
 # LLVM tools dir can be passed in lit parameters, so try to
diff --git a/test/lsan/TestCases/Darwin/dispatch.mm b/test/lsan/TestCases/Darwin/dispatch.mm
new file mode 100644
index 0000000..606cc9e
--- /dev/null
+++ b/test/lsan/TestCases/Darwin/dispatch.mm
@@ -0,0 +1,59 @@
+// Test for threads spawned with wqthread_start
+// RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
+// RUN: %clangxx_lsan %s -DDISPATCH_ASYNC -o %t-async -framework Foundation
+// RUN: %clangxx_lsan %s -DDISPATCH_SYNC -o %t-sync -framework Foundation
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t-async 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t-sync 2>&1 | FileCheck %s
+
+#include <dispatch/dispatch.h>
+#include <pthread.h>
+#include <stdlib.h>
+
+#include "sanitizer_common/print_address.h"
+
+bool done = false;
+
+void worker_do_leak(int size) {
+  void *p = malloc(size);
+  print_address("Test alloc: ", 1, p);
+  done = true;
+}
+
+#if DISPATCH_ASYNC
+// Tests for the Grand Central Dispatch. See
+// http://developer.apple.com/library/mac/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html
+// for the reference.
+void TestGCDDispatch() {
+  dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
+  dispatch_block_t block = ^{
+    worker_do_leak(1337);
+  };
+  // dispatch_async() runs the task on a worker thread that does not go through
+  // pthread_create(). We need to verify that LeakSanitizer notices that the
+  // thread has started.
+  dispatch_async(queue, block);
+  while (!done)
+    pthread_yield_np();
+}
+#elif DISPATCH_SYNC
+void TestGCDDispatch() {
+  dispatch_queue_t queue = dispatch_get_global_queue(2, 0);
+  dispatch_block_t block = ^{
+    worker_do_leak(1337);
+  };
+  // dispatch_sync() runs the task on a worker thread that does not go through
+  // pthread_create(). We need to verify that LeakSanitizer notices that the
+  // thread has started.
+  dispatch_sync(queue, block);
+}
+#endif
+
+int main() {
+  TestGCDDispatch();
+  return 0;
+}
+
+// CHECK: Test alloc: [[addr:0x[0-9,a-f]+]]
+// CHECK: LeakSanitizer: detected memory leaks
+// CHECK: [[addr]] (1337 bytes)
+// CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer:
diff --git a/test/lsan/TestCases/Darwin/lit.local.cfg b/test/lsan/TestCases/Darwin/lit.local.cfg
new file mode 100644
index 0000000..a85dfcd
--- /dev/null
+++ b/test/lsan/TestCases/Darwin/lit.local.cfg
@@ -0,0 +1,9 @@
+def getRoot(config):
+  if not config.parent:
+    return config
+  return getRoot(config.parent)
+
+root = getRoot(config)
+
+if root.host_os not in ['Darwin']:
+  config.unsupported = True
diff --git a/test/lsan/TestCases/cleanup_in_tsd_destructor.c b/test/lsan/TestCases/Linux/cleanup_in_tsd_destructor.c
similarity index 90%
rename from test/lsan/TestCases/cleanup_in_tsd_destructor.c
rename to test/lsan/TestCases/Linux/cleanup_in_tsd_destructor.c
index 6da7595..cf080e4 100644
--- a/test/lsan/TestCases/cleanup_in_tsd_destructor.c
+++ b/test/lsan/TestCases/Linux/cleanup_in_tsd_destructor.c
@@ -5,8 +5,8 @@
 // makes its best effort.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0:use_stacks=0:use_globals=0"
 // RUN: %clang_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:use_tls=1 %run %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:use_tls=0 not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:use_tls=1 %run %t
+// RUN: %env_lsan_opts=$LSAN_BASE:use_tls=0 not %run %t 2>&1 | FileCheck %s
 
 #include <assert.h>
 #include <pthread.h>
diff --git a/test/lsan/TestCases/disabler_in_tsd_destructor.c b/test/lsan/TestCases/Linux/disabler_in_tsd_destructor.c
similarity index 95%
rename from test/lsan/TestCases/disabler_in_tsd_destructor.c
rename to test/lsan/TestCases/Linux/disabler_in_tsd_destructor.c
index 4a3a7ac..52819bb 100644
--- a/test/lsan/TestCases/disabler_in_tsd_destructor.c
+++ b/test/lsan/TestCases/Linux/disabler_in_tsd_destructor.c
@@ -1,7 +1,7 @@
 // Regression test. Disabler should not depend on TSD validity.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0:use_stacks=0:use_globals=0:use_tls=1:use_ld_allocations=0"
 // RUN: %clang_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t
 
 #include <assert.h>
 #include <pthread.h>
diff --git a/test/lsan/TestCases/fork.cc b/test/lsan/TestCases/Linux/fork.cc
similarity index 100%
rename from test/lsan/TestCases/fork.cc
rename to test/lsan/TestCases/Linux/fork.cc
diff --git a/test/lsan/TestCases/fork_threaded.cc b/test/lsan/TestCases/Linux/fork_threaded.cc
similarity index 100%
rename from test/lsan/TestCases/fork_threaded.cc
rename to test/lsan/TestCases/Linux/fork_threaded.cc
diff --git a/test/lsan/TestCases/guard-page.c b/test/lsan/TestCases/Linux/guard-page.c
similarity index 100%
rename from test/lsan/TestCases/guard-page.c
rename to test/lsan/TestCases/Linux/guard-page.c
diff --git a/test/lsan/TestCases/Linux/lit.local.cfg b/test/lsan/TestCases/Linux/lit.local.cfg
new file mode 100644
index 0000000..57271b8
--- /dev/null
+++ b/test/lsan/TestCases/Linux/lit.local.cfg
@@ -0,0 +1,9 @@
+def getRoot(config):
+  if not config.parent:
+    return config
+  return getRoot(config.parent)
+
+root = getRoot(config)
+
+if root.host_os not in ['Linux']:
+  config.unsupported = True
diff --git a/test/lsan/TestCases/use_tls_dynamic.cc b/test/lsan/TestCases/Linux/use_tls_dynamic.cc
similarity index 88%
rename from test/lsan/TestCases/use_tls_dynamic.cc
rename to test/lsan/TestCases/Linux/use_tls_dynamic.cc
index 927c5c4..d60dec0 100644
--- a/test/lsan/TestCases/use_tls_dynamic.cc
+++ b/test/lsan/TestCases/Linux/use_tls_dynamic.cc
@@ -2,9 +2,10 @@
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0:use_ld_allocations=0"
 // RUN: %clangxx %s -DBUILD_DSO -fPIC -shared -o %t-so.so
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
+// UNSUPPORTED: i386-linux,i686-linux,arm
 
 #ifndef BUILD_DSO
 #include <assert.h>
diff --git a/test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc b/test/lsan/TestCases/Linux/use_tls_pthread_specific_dynamic.cc
similarity index 86%
rename from test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc
rename to test/lsan/TestCases/Linux/use_tls_pthread_specific_dynamic.cc
index 9ab4e1c..650e6ad 100644
--- a/test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc
+++ b/test/lsan/TestCases/Linux/use_tls_pthread_specific_dynamic.cc
@@ -1,9 +1,9 @@
 // Test that dynamically allocated thread-specific storage is included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <assert.h>
 #include <pthread.h>
diff --git a/test/lsan/TestCases/use_tls_pthread_specific_static.cc b/test/lsan/TestCases/Linux/use_tls_pthread_specific_static.cc
similarity index 83%
rename from test/lsan/TestCases/use_tls_pthread_specific_static.cc
rename to test/lsan/TestCases/Linux/use_tls_pthread_specific_static.cc
index be0bcf6..cafe40f 100644
--- a/test/lsan/TestCases/use_tls_pthread_specific_static.cc
+++ b/test/lsan/TestCases/Linux/use_tls_pthread_specific_static.cc
@@ -1,9 +1,9 @@
 // Test that statically allocated thread-specific storage is included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <assert.h>
 #include <pthread.h>
diff --git a/test/lsan/TestCases/use_tls_static.cc b/test/lsan/TestCases/Linux/use_tls_static.cc
similarity index 75%
rename from test/lsan/TestCases/use_tls_static.cc
rename to test/lsan/TestCases/Linux/use_tls_static.cc
index 5ffaf16..84cc6c9 100644
--- a/test/lsan/TestCases/use_tls_static.cc
+++ b/test/lsan/TestCases/Linux/use_tls_static.cc
@@ -1,9 +1,9 @@
 // Test that statically allocated TLS space is included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/allocator_returns_null.cc b/test/lsan/TestCases/allocator_returns_null.cc
new file mode 100644
index 0000000..28dd696
--- /dev/null
+++ b/test/lsan/TestCases/allocator_returns_null.cc
@@ -0,0 +1,131 @@
+// Test the behavior of malloc/calloc/realloc/new when the allocation size is
+// more than LSan allocator's max allowed one.
+// By default (allocator_may_return_null=0) the process should crash.
+// With allocator_may_return_null=1 the allocator should return 0, except the
+// operator new(), which should crash anyway (operator new(std::nothrow) should
+// return nullptr, indeed).
+//
+// RUN: %clangxx_lsan -O0 %s -o %t
+// RUN: not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1     %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mNULL
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1     %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cNULL
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1     %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coNULL
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1     %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rNULL
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrNULL
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=0 not %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnCRASH
+// RUN: %env_lsan_opts=allocator_may_return_null=1     %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnNULL
+
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits>
+#include <new>
+
+int main(int argc, char **argv) {
+  // Disable stderr buffering. Needed on Windows.
+  setvbuf(stderr, NULL, _IONBF, 0);
+
+  assert(argc == 2);
+  const char *action = argv[1];
+  fprintf(stderr, "%s:\n", action);
+
+  // Use max of ASan and LSan allocator limits to cover both "lsan" and
+  // "lsan + asan" configs.
+  static const size_t kMaxAllowedMallocSizePlusOne =
+#if __LP64__ || defined(_WIN64)
+      (1ULL << 40) + 1;
+#else
+      (3UL << 30) + 1;
+#endif
+
+  void *x = 0;
+  if (!strcmp(action, "malloc")) {
+    x = malloc(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "calloc")) {
+    x = calloc((kMaxAllowedMallocSizePlusOne / 4) + 1, 4);
+  } else if (!strcmp(action, "calloc-overflow")) {
+    volatile size_t kMaxSizeT = std::numeric_limits<size_t>::max();
+    size_t kArraySize = 4096;
+    volatile size_t kArraySize2 = kMaxSizeT / kArraySize + 10;
+    x = calloc(kArraySize, kArraySize2);
+  } else if (!strcmp(action, "realloc")) {
+    x = realloc(0, kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "realloc-after-malloc")) {
+    char *t = (char*)malloc(100);
+    *t = 42;
+    x = realloc(t, kMaxAllowedMallocSizePlusOne);
+    assert(*t == 42);
+    free(t);
+  } else if (!strcmp(action, "new")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "new-nothrow")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne, std::nothrow);
+  } else {
+    assert(0);
+  }
+
+  fprintf(stderr, "errno: %d\n", errno);
+
+  // The NULL pointer is printed differently on different systems, while (long)0
+  // is always the same.
+  fprintf(stderr, "x: %zu\n", (size_t)x);
+  free(x);
+
+  return x != 0;
+}
+
+// CHECK-mCRASH: malloc:
+// CHECK-mCRASH: Sanitizer's allocator is terminating the process
+// CHECK-cCRASH: calloc:
+// CHECK-cCRASH: Sanitizer's allocator is terminating the process
+// CHECK-coCRASH: calloc-overflow:
+// CHECK-coCRASH: Sanitizer's allocator is terminating the process
+// CHECK-rCRASH: realloc:
+// CHECK-rCRASH: Sanitizer's allocator is terminating the process
+// CHECK-mrCRASH: realloc-after-malloc:
+// CHECK-mrCRASH: Sanitizer's allocator is terminating the process
+// CHECK-nCRASH: new:
+// CHECK-nCRASH: Sanitizer's allocator is terminating the process
+// CHECK-nnCRASH: new-nothrow:
+// CHECK-nnCRASH: Sanitizer's allocator is terminating the process
+
+// CHECK-mNULL: malloc:
+// CHECK-mNULL: errno: 12
+// CHECK-mNULL: x: 0
+// CHECK-cNULL: calloc:
+// CHECK-cNULL: errno: 12
+// CHECK-cNULL: x: 0
+// CHECK-coNULL: calloc-overflow:
+// CHECK-coNULL: errno: 12
+// CHECK-coNULL: x: 0
+// CHECK-rNULL: realloc:
+// CHECK-rNULL: errno: 12
+// CHECK-rNULL: x: 0
+// CHECK-mrNULL: realloc-after-malloc:
+// CHECK-mrNULL: errno: 12
+// CHECK-mrNULL: x: 0
+// CHECK-nnNULL: new-nothrow:
+// CHECK-nnNULL: x: 0
diff --git a/test/lsan/TestCases/disabler.c b/test/lsan/TestCases/disabler.c
index 1c4529d..f8b7f0d 100644
--- a/test/lsan/TestCases/disabler.c
+++ b/test/lsan/TestCases/disabler.c
@@ -1,7 +1,7 @@
 // Test for __lsan_disable() / __lsan_enable().
 // RUN: LSAN_BASE="report_objects=1:use_registers=0:use_stacks=0:use_globals=0:use_tls=0"
 // RUN: %clang_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/disabler.cc b/test/lsan/TestCases/disabler.cc
index 12e5ffe..c5ffdb0 100644
--- a/test/lsan/TestCases/disabler.cc
+++ b/test/lsan/TestCases/disabler.cc
@@ -1,7 +1,7 @@
 // Test for ScopedDisabler.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0:use_stacks=0:use_globals=0:use_tls=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/do_leak_check_override.cc b/test/lsan/TestCases/do_leak_check_override.cc
index bedb0ca..40a9763 100644
--- a/test/lsan/TestCases/do_leak_check_override.cc
+++ b/test/lsan/TestCases/do_leak_check_override.cc
@@ -3,8 +3,8 @@
 // "normal" mode (LSan runs in "strict" mode by default).
 // RUN: LSAN_BASE="use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck --check-prefix=CHECK-strict %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t foo 2>&1 | FileCheck --check-prefix=CHECK-normal %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck --check-prefix=CHECK-strict %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t foo 2>&1 | FileCheck --check-prefix=CHECK-normal %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/high_allocator_contention.cc b/test/lsan/TestCases/high_allocator_contention.cc
index f423fd4..cbe592c 100644
--- a/test/lsan/TestCases/high_allocator_contention.cc
+++ b/test/lsan/TestCases/high_allocator_contention.cc
@@ -2,7 +2,7 @@
 // Usage: ./a.out number_of_threads total_number_of_allocations
 // RUN: LSAN_BASE="use_ld_allocations=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t 5 1000000 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t 5 1000000 2>&1
 #include <assert.h>
 #include <pthread.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/ignore_object.c b/test/lsan/TestCases/ignore_object.c
index 2aa4f14..53dea75 100644
--- a/test/lsan/TestCases/ignore_object.c
+++ b/test/lsan/TestCases/ignore_object.c
@@ -1,7 +1,7 @@
 // Test for __lsan_ignore_object().
 // RUN: LSAN_BASE="report_objects=1:use_registers=0:use_stacks=0:use_globals=0:use_tls=0"
 // RUN: %clang_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/ignore_object_errors.cc b/test/lsan/TestCases/ignore_object_errors.cc
index 4160327..76cd3bb 100644
--- a/test/lsan/TestCases/ignore_object_errors.cc
+++ b/test/lsan/TestCases/ignore_object_errors.cc
@@ -1,6 +1,6 @@
 // Test for incorrect use of __lsan_ignore_object().
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t 2>&1 | FileCheck %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/large_allocation_leak.cc b/test/lsan/TestCases/large_allocation_leak.cc
index 9d5698c..66f364f 100644
--- a/test/lsan/TestCases/large_allocation_leak.cc
+++ b/test/lsan/TestCases/large_allocation_leak.cc
@@ -1,7 +1,11 @@
 // Test that LargeMmapAllocator's chunks aren't reachable via some internal data structure.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+
+// For 32 bit LSan it's pretty likely that large chunks are "reachable" from some
+// internal data structures (e.g. Glibc global data).
+// UNSUPPORTED: x86, arm
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/leak_check_at_exit.cc b/test/lsan/TestCases/leak_check_at_exit.cc
index 6f1cd22..8a8ff82 100644
--- a/test/lsan/TestCases/leak_check_at_exit.cc
+++ b/test/lsan/TestCases/leak_check_at_exit.cc
@@ -1,10 +1,10 @@
 // Test for the leak_check_at_exit flag.
 // RUN: LSAN_BASE="use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-do
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-do
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"leak_check_at_exit=0" not %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-do
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"leak_check_at_exit=0" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-do
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-do
+// RUN: %env_lsan_opts=$LSAN_BASE:"leak_check_at_exit=0" not %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-do
+// RUN: %env_lsan_opts=$LSAN_BASE:"leak_check_at_exit=0" %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/leak_check_before_thread_started.cc b/test/lsan/TestCases/leak_check_before_thread_started.cc
index ca818e1..94084dc 100644
--- a/test/lsan/TestCases/leak_check_before_thread_started.cc
+++ b/test/lsan/TestCases/leak_check_before_thread_started.cc
@@ -1,7 +1,7 @@
 // Regression test for http://llvm.org/bugs/show_bug.cgi?id=21621
 // This test relies on timing between threads, so any failures will be flaky.
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS="log_pointers=1:log_threads=1" %run %t
+// RUN: %env_lsan_opts="log_pointers=1:log_threads=1" %run %t
 #include <assert.h>
 #include <pthread.h>
 #include <stdio.h>
diff --git a/test/lsan/TestCases/link_turned_off.cc b/test/lsan/TestCases/link_turned_off.cc
index 2482f61..fd11272 100644
--- a/test/lsan/TestCases/link_turned_off.cc
+++ b/test/lsan/TestCases/link_turned_off.cc
@@ -1,8 +1,10 @@
 // Test for disabling LSan at link-time.
 // RUN: LSAN_BASE="use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s
+//
+// UNSUPPORTED: darwin
 
 #include <sanitizer/lsan_interface.h>
 
diff --git a/test/lsan/TestCases/many_tls_keys.cc b/test/lsan/TestCases/many_tls_keys.cc
new file mode 100644
index 0000000..5b5d692
--- /dev/null
+++ b/test/lsan/TestCases/many_tls_keys.cc
@@ -0,0 +1,97 @@
+// Test that lsan handles tls correctly for many threads
+// RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
+// RUN: %clangxx_lsan %s -DUSE_THREAD -o %t-thread
+// RUN: %clangxx_lsan %s -DUSE_PTHREAD -o %t-pthread
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=0" not %run %t-thread 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=1" %run %t-thread 2>&1
+// RUN: %env_lsan_opts="" %run %t-thread 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=0" not %run %t-pthread 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_tls=1" %run %t-pthread 2>&1
+// RUN: %env_lsan_opts="" %run %t-pthread 2>&1
+
+// Patch r303906 did not fix all the problems.
+// UNSUPPORTED: arm-linux,armhf-linux
+
+#include <assert.h>
+#include <limits.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static const int NUM_THREADS = 10;
+
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+int finished = 0;
+
+#if USE_THREAD
+__thread void *ptr1;
+__thread void *ptr2;
+__thread void *ptr3;
+__thread void *ptr4;
+__thread void *ptr5;
+
+void alloc() {
+  ptr1 = malloc(1111);
+  ptr2 = malloc(2222);
+  ptr3 = malloc(3333);
+  ptr4 = malloc(4444);
+  ptr5 = malloc(5555);
+}
+
+#elif USE_PTHREAD
+// We won't be able to create the maximum number of keys, due to other users
+// of the tls, but we'll use as many keys as we can before failing to create
+// a new key.
+pthread_key_t keys[PTHREAD_KEYS_MAX];
+static const int PTHREAD_KEY_INVALID = 0xffffffff;
+
+void alloc() {
+  for (int i = 0; i < PTHREAD_KEYS_MAX; ++i) {
+    void *ptr = malloc(123);
+    if ((keys[i] == PTHREAD_KEY_INVALID) || pthread_setspecific(keys[i], ptr)) {
+      free(ptr);
+      break;
+    }
+  }
+}
+
+void pthread_destructor(void *arg) {
+  assert(0 && "pthread destructors shouldn't be called");
+}
+#endif
+
+void *thread_start(void *arg) {
+  alloc();
+
+  pthread_mutex_lock(&mutex);
+  finished++;
+  pthread_mutex_unlock(&mutex);
+
+  // don't exit, to intentionally leak tls data
+  while (1)
+    sleep(100);
+}
+
+int main() {
+#if USE_PTHREAD
+  for (int i = 0; i < PTHREAD_KEYS_MAX; ++i) {
+    if (pthread_key_create(&keys[i], pthread_destructor)) {
+      keys[i] = PTHREAD_KEY_INVALID;
+      break;
+    }
+  }
+#endif
+
+  pthread_t thread[NUM_THREADS];
+  for (int i = 0; i < NUM_THREADS; ++i) {
+    assert(0 == pthread_create(&thread[i], 0, thread_start, 0));
+  }
+  // spin until all threads have finished
+  while (finished < NUM_THREADS)
+    sleep(1);
+  exit(0);
+}
+
+// CHECK: LeakSanitizer: detected memory leaks
+// CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer:
diff --git a/test/lsan/TestCases/pointer_to_self.cc b/test/lsan/TestCases/pointer_to_self.cc
index 40c1228..62683a2 100644
--- a/test/lsan/TestCases/pointer_to_self.cc
+++ b/test/lsan/TestCases/pointer_to_self.cc
@@ -2,7 +2,7 @@
 // object is indirectly leaked. Only external pointers count.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/print_suppressions.cc b/test/lsan/TestCases/print_suppressions.cc
index b292c0a..2fa199d 100644
--- a/test/lsan/TestCases/print_suppressions.cc
+++ b/test/lsan/TestCases/print_suppressions.cc
@@ -2,10 +2,10 @@
 // matched. Default is print_suppressions=true.
 // RUN: LSAN_BASE="use_registers=0:use_stacks=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:print_suppressions=0 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont-print
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont-print
-// RUN: LSAN_OPTIONS=$LSAN_BASE:print_suppressions=0 %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-dont-print
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-print
+// RUN: %env_lsan_opts=$LSAN_BASE:print_suppressions=0 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont-print
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-dont-print
+// RUN: %env_lsan_opts=$LSAN_BASE:print_suppressions=0 %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-dont-print
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-print
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/recoverable_leak_check.cc b/test/lsan/TestCases/recoverable_leak_check.cc
index 0fe377f..85988e2 100644
--- a/test/lsan/TestCases/recoverable_leak_check.cc
+++ b/test/lsan/TestCases/recoverable_leak_check.cc
@@ -1,8 +1,10 @@
 // Test for on-demand leak checking.
 // RUN: LSAN_BASE="use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t foo 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t foo 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t 2>&1 | FileCheck %s
+//
+// UNSUPPORTED: darwin
 
 #include <assert.h>
 #include <stdio.h>
diff --git a/test/lsan/TestCases/register_root_region.cc b/test/lsan/TestCases/register_root_region.cc
index 6fc84c2..b73b56b 100644
--- a/test/lsan/TestCases/register_root_region.cc
+++ b/test/lsan/TestCases/register_root_region.cc
@@ -1,9 +1,9 @@
 // Test for __lsan_(un)register_root_region().
 // RUN: LSAN_BASE="use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:use_root_regions=0 not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE %run %t
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:use_root_regions=0 not %run %t 2>&1 | FileCheck %s
 
 #include <assert.h>
 #include <stdio.h>
diff --git a/test/lsan/TestCases/stale_stack_leak.cc b/test/lsan/TestCases/stale_stack_leak.cc
index 770096b..635d738 100644
--- a/test/lsan/TestCases/stale_stack_leak.cc
+++ b/test/lsan/TestCases/stale_stack_leak.cc
@@ -1,8 +1,11 @@
 // Test that out-of-scope local variables are ignored by LSan.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0:use_stacks=1"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE":exitcode=0" %run %t 2>&1 | FileCheck --check-prefix=CHECK-sanity %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE":exitcode=0" %run %t 2>&1 | FileCheck --check-prefix=CHECK-sanity %s
+//
+// x86 passes parameters through stack that may lead to false negatives
+// UNSUPPORTED: x86
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/suppressions_default.cc b/test/lsan/TestCases/suppressions_default.cc
index b4c0de0..9a660e6 100644
--- a/test/lsan/TestCases/suppressions_default.cc
+++ b/test/lsan/TestCases/suppressions_default.cc
@@ -1,6 +1,6 @@
 // RUN: LSAN_BASE="use_registers=0:use_stacks=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE not %run %t 2>&1 | FileCheck %s
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/suppressions_file.cc b/test/lsan/TestCases/suppressions_file.cc
index 805091c..33cf020 100644
--- a/test/lsan/TestCases/suppressions_file.cc
+++ b/test/lsan/TestCases/suppressions_file.cc
@@ -3,13 +3,13 @@
 
 // RUN: rm -f %t.supp
 // RUN: touch %t.supp
-// RUN: LSAN_OPTIONS="$LSAN_BASE:suppressions='%t.supp'" not %run %t 2>&1 | FileCheck %s --check-prefix=NOSUPP
+// RUN: %env_lsan_opts="$LSAN_BASE:suppressions='%t.supp'" not %run %t 2>&1 | FileCheck %s --check-prefix=NOSUPP
 
 // RUN: echo "leak:*LSanTestLeakingFunc*" > %t.supp
-// RUN: LSAN_OPTIONS="$LSAN_BASE:suppressions='%t.supp'" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts="$LSAN_BASE:suppressions='%t.supp'" not %run %t 2>&1 | FileCheck %s
 
 // RUN: echo "leak:%t" > %t.supp
-// RUN: LSAN_OPTIONS="$LSAN_BASE:suppressions='%t.supp':symbolize=false" %run %t
+// RUN: %env_lsan_opts="$LSAN_BASE:suppressions='%t.supp':symbolize=false" %run %t
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/swapcontext.cc b/test/lsan/TestCases/swapcontext.cc
index f7e95ed..f46897a 100644
--- a/test/lsan/TestCases/swapcontext.cc
+++ b/test/lsan/TestCases/swapcontext.cc
@@ -2,8 +2,9 @@
 // memory. Make sure we don't report these leaks.
 
 // RUN: %clangxx_lsan %s -o %t
-// RUN: %run %t 2>&1
-// RUN: not %run %t foo 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts= %run %t 2>&1
+// RUN: %env_lsan_opts= not %run %t foo 2>&1 | FileCheck %s
+// UNSUPPORTED: arm
 
 #include <stdio.h>
 #if defined(__APPLE__)
@@ -23,7 +24,7 @@
 }
 
 int main(int argc, char *argv[]) {
-  char stack_memory[kStackSize + 1];
+  char stack_memory[kStackSize + 1] __attribute__((aligned(16)));
   char *heap_memory = new char[kStackSize + 1];
   char *child_stack = (argc > 1) ? stack_memory : heap_memory;
 
diff --git a/test/lsan/TestCases/use_after_return.cc b/test/lsan/TestCases/use_after_return.cc
index ed9cc78..5c60ec6 100644
--- a/test/lsan/TestCases/use_after_return.cc
+++ b/test/lsan/TestCases/use_after_return.cc
@@ -2,9 +2,9 @@
 // in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0"
 // RUN: %clangxx_lsan %s -O2 -o %t
-// RUN: ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1 LSAN_OPTIONS=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
-// RUN: ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1 LSAN_OPTIONS=$LSAN_BASE:"use_stacks=1" %run %t 2>&1
-// RUN: ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1 LSAN_OPTIONS="" %run %t 2>&1
+// RUN: ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1 %env_lsan_opts=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
+// RUN: ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1 %env_lsan_opts=$LSAN_BASE:"use_stacks=1" %run %t 2>&1
+// RUN: ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1 %env_lsan_opts="" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/use_globals_initialized.cc b/test/lsan/TestCases/use_globals_initialized.cc
index 45c12dc..8664618 100644
--- a/test/lsan/TestCases/use_globals_initialized.cc
+++ b/test/lsan/TestCases/use_globals_initialized.cc
@@ -1,9 +1,9 @@
 // Test that initialized globals are included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_globals=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_globals=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_globals=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_globals=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/use_globals_uninitialized.cc b/test/lsan/TestCases/use_globals_uninitialized.cc
index c198fcc..ef8f8e1 100644
--- a/test/lsan/TestCases/use_globals_uninitialized.cc
+++ b/test/lsan/TestCases/use_globals_uninitialized.cc
@@ -1,9 +1,9 @@
 // Test that uninitialized globals are included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_globals=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_globals=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_globals=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_globals=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/use_poisoned_asan.cc b/test/lsan/TestCases/use_poisoned_asan.cc
index 5acceeb..780792e 100644
--- a/test/lsan/TestCases/use_poisoned_asan.cc
+++ b/test/lsan/TestCases/use_poisoned_asan.cc
@@ -2,8 +2,8 @@
 // REQUIRES: asan
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_poisoned=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_poisoned=1" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_poisoned=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_poisoned=1" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/use_registers.cc b/test/lsan/TestCases/use_registers.cc
index 7647679..5d5ede5 100644
--- a/test/lsan/TestCases/use_registers.cc
+++ b/test/lsan/TestCases/use_registers.cc
@@ -1,9 +1,9 @@
 // Test that registers of running threads are included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0"
 // RUN: %clangxx_lsan -pthread %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_registers=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_registers=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_registers=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_registers=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <assert.h>
 #include <pthread.h>
@@ -33,6 +33,11 @@
       :
       : "r" (p)
       );
+#elif defined(__arm__)
+  asm ( "mov r5, %0"
+      :
+      : "r" (p)
+      );
 #else
 #error "Test is not supported on this architecture."
 #endif
diff --git a/test/lsan/TestCases/use_stacks.cc b/test/lsan/TestCases/use_stacks.cc
index c32af68..855a8e4 100644
--- a/test/lsan/TestCases/use_stacks.cc
+++ b/test/lsan/TestCases/use_stacks.cc
@@ -1,9 +1,9 @@
 // Test that stack of main thread is included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_stacks=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/TestCases/use_stacks_threaded.cc b/test/lsan/TestCases/use_stacks_threaded.cc
index ac1fb46..579dcff 100644
--- a/test/lsan/TestCases/use_stacks_threaded.cc
+++ b/test/lsan/TestCases/use_stacks_threaded.cc
@@ -1,9 +1,9 @@
 // Test that stacks of non-main threads are included in the root set.
 // RUN: LSAN_BASE="report_objects=1:use_registers=0"
 // RUN: %clangxx_lsan -pthread %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=1" %run %t 2>&1
-// RUN: LSAN_OPTIONS="" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_stacks=1" %run %t 2>&1
+// RUN: %env_lsan_opts="" %run %t 2>&1
 
 #include <assert.h>
 #include <pthread.h>
diff --git a/test/lsan/TestCases/use_unaligned.cc b/test/lsan/TestCases/use_unaligned.cc
index 86c3ed5..26afc2d 100644
--- a/test/lsan/TestCases/use_unaligned.cc
+++ b/test/lsan/TestCases/use_unaligned.cc
@@ -1,8 +1,8 @@
 // Test that unaligned pointers are detected correctly.
 // RUN: LSAN_BASE="report_objects=1:use_stacks=0:use_registers=0"
 // RUN: %clangxx_lsan %s -o %t
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_unaligned=0" not %run %t 2>&1 | FileCheck %s
-// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_unaligned=1" %run %t 2>&1
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_unaligned=0" not %run %t 2>&1 | FileCheck %s
+// RUN: %env_lsan_opts=$LSAN_BASE:"use_unaligned=1" %run %t 2>&1
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/test/lsan/lit.common.cfg b/test/lsan/lit.common.cfg
index 8580eec..610b1b1 100644
--- a/test/lsan/lit.common.cfg
+++ b/test/lsan/lit.common.cfg
@@ -3,6 +3,7 @@
 # Common configuration for running leak detection tests under LSan/ASan.
 
 import os
+import re
 
 import lit.util
 
@@ -31,6 +32,21 @@
   lit_config.fatal("Unknown LSan test mode: %r" % lsan_lit_test_mode)
 config.name += config.name_suffix
 
+# Platform-specific default LSAN_OPTIONS for lit tests.
+default_lsan_opts = 'detect_leaks=1'
+if config.host_os == 'Darwin':
+  # On Darwin, we default to `abort_on_error=1`, which would make tests run
+  # much slower. Let's override this and run lit tests with 'abort_on_error=0'.
+  # Also, make sure we do not overwhelm the syslog while testing.
+  default_lsan_opts += ':abort_on_error=0'
+  default_lsan_opts += ':log_to_syslog=0'
+
+if default_lsan_opts:
+  config.environment['LSAN_OPTIONS'] = default_lsan_opts
+  default_lsan_opts += ':'
+config.substitutions.append(('%env_lsan_opts=',
+                             'env LSAN_OPTIONS=' + default_lsan_opts))
+
 if lit.util.which('strace'):
   config.available_features.add('strace')
 
@@ -51,8 +67,14 @@
 config.substitutions.append( ("%clang_lsan ", build_invocation(clang_lsan_cflags)) )
 config.substitutions.append( ("%clangxx_lsan ", build_invocation(clang_lsan_cxxflags)) )
 
-# LeakSanitizer tests are currently supported on x86-64 Linux and mips64 Linux only.
-if config.host_os not in ['Linux'] or config.host_arch not in ['x86_64', 'mips64']:
+# LeakSanitizer tests are currently supported on x86-64 Linux, PowerPC64 Linux, arm Linux, mips64 Linux, and x86_64 Darwin.
+supported_linux = config.host_os is 'Linux' and config.host_arch in ['x86_64', 'ppc64', 'mips64', 'arm', 'armhf', 'armv7l']
+supported_darwin = config.host_os is 'Darwin' and config.target_arch is 'x86_64'
+if not (supported_linux or supported_darwin):
   config.unsupported = True
 
-config.suffixes = ['.c', '.cc', '.cpp']
+# Don't support Thumb due to broken fast unwinder
+if re.search('mthumb', config.target_cflags) is not None:
+  config.unsupported = True
+
+config.suffixes = ['.c', '.cc', '.cpp', '.mm']
diff --git a/test/msan/Linux/sendmsg.cc b/test/msan/Linux/sendmsg.cc
index 6a8ef83..4fc6c88 100644
--- a/test/msan/Linux/sendmsg.cc
+++ b/test/msan/Linux/sendmsg.cc
@@ -33,17 +33,31 @@
   char buf[kBufSize] = {0};
   pthread_t client_thread;
   struct sockaddr_in serveraddr;
-
-  sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+  struct sockaddr_in6 serveraddr6;
 
   memset(&serveraddr, 0, sizeof(serveraddr));
   serveraddr.sin_family = AF_INET;
   serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
   serveraddr.sin_port = 0;
-
-  bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
+  struct sockaddr *addr = (struct sockaddr *)&serveraddr;
   socklen_t addrlen = sizeof(serveraddr);
-  getsockname(sockfd, (struct sockaddr *)&serveraddr, &addrlen);
+
+  sockfd = socket(addr->sa_family, SOCK_DGRAM, 0);
+  if (sockfd <= 0) {
+    // Try to fall-back to IPv6
+    memset(&serveraddr6, 0, sizeof(serveraddr6));
+    serveraddr6.sin6_family = AF_INET6;
+    serveraddr6.sin6_addr = in6addr_any;
+    serveraddr6.sin6_port = 0;
+    addr = (struct sockaddr *)&serveraddr6;
+    addrlen = sizeof(serveraddr6);
+
+    sockfd = socket(addr->sa_family, SOCK_DGRAM, 0);
+  }
+  assert(sockfd > 0);
+
+  bind(sockfd, addr, addrlen);
+  getsockname(sockfd, addr, &addrlen);
 
 #if defined(POISON)
   __msan_poison(buf + 7, 1);
@@ -52,7 +66,7 @@
 #if defined(SENDMSG)
   struct iovec iov[2] = {{buf, 5}, {buf + 5, 5}};
   struct msghdr msg;
-  msg.msg_name = &serveraddr;
+  msg.msg_name = addr;
   msg.msg_namelen = addrlen;
   msg.msg_iov = iov;
   msg.msg_iovlen = 2;
@@ -62,14 +76,13 @@
 #endif
 
 #if defined(SEND)
-  ret = connect(sockfd, (struct sockaddr *)&serveraddr, addrlen);
+  ret = connect(sockfd, addr, addrlen);
   assert(ret == 0);
   ret = send(sockfd, buf, kBufSize, 0);
   // SEND: Uninitialized bytes in __interceptor_send at offset 7 inside [{{.*}}, 10)
   assert(ret > 0);
 #elif defined(SENDTO)
-  ret =
-      sendto(sockfd, buf, kBufSize, 0, (struct sockaddr *)&serveraddr, addrlen);
+  ret = sendto(sockfd, buf, kBufSize, 0, addr, addrlen);
   // SENDTO: Uninitialized bytes in __interceptor_sendto at offset 7 inside [{{.*}}, 10)
   assert(ret > 0);
 #elif defined(SENDMSG)
diff --git a/test/msan/Linux/strerror_r.cc b/test/msan/Linux/strerror_r.cc
new file mode 100644
index 0000000..aec653f
--- /dev/null
+++ b/test/msan/Linux/strerror_r.cc
@@ -0,0 +1,18 @@
+// RUN: %clang_msan -O0 -g %s -o %t && %run %t
+
+#include <assert.h>
+#include <errno.h>
+#include <string.h>
+
+int main() {
+  char buf[1000];
+  char *res = strerror_r(EINVAL, buf, sizeof(buf));
+  assert(res);
+  volatile int z = strlen(res);
+
+  res = strerror_r(-1, buf, sizeof(buf));
+  assert(res);
+  z = strlen(res);
+
+  return 0;
+}
diff --git a/test/msan/alloca.cc b/test/msan/alloca.cc
new file mode 100644
index 0000000..3472361
--- /dev/null
+++ b/test/msan/alloca.cc
@@ -0,0 +1,25 @@
+// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t
+// RUN: %clangxx_msan -O3 -g %s -o %t && %run %t
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sanitizer/msan_interface.h>
+
+int main(void) {
+  char *p = (char *)alloca(16);
+  assert(0 == __msan_test_shadow(p, 16));
+  assert(0 == __msan_test_shadow(p + 15, 1));
+
+  memset(p, 0, 16);
+  assert(-1 == __msan_test_shadow(p, 16));
+
+  volatile int x = 0;
+  char * volatile q = (char *)alloca(42 * x);
+  assert(-1 == __msan_test_shadow(p, 16));
+
+  int r[x];
+  int *volatile r2 = r;
+  assert(-1 == __msan_test_shadow(p, 16));
+}
diff --git a/test/msan/allocator_returns_null.cc b/test/msan/allocator_returns_null.cc
index f4ea51d..583b5b4 100644
--- a/test/msan/allocator_returns_null.cc
+++ b/test/msan/allocator_returns_null.cc
@@ -1,63 +1,102 @@
-// Test the behavior of malloc/calloc/realloc when the allocation size is huge.
+// Test the behavior of malloc/calloc/realloc/new when the allocation size is
+// more than MSan allocator's max allowed one.
 // By default (allocator_may_return_null=0) the process should crash.
-// With allocator_may_return_null=1 the allocator should return 0.
+// With allocator_may_return_null=1 the allocator should return 0, except the
+// operator new(), which should crash anyway (operator new(std::nothrow) should
+// return nullptr, indeed).
 //
 // RUN: %clangxx_msan -O0 %s -o %t
 // RUN: not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
-// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
-// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mNULL
-// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t calloc 2>&1 | FileCheck %s --check-prefix=CHECK-cCRASH
-// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t calloc 2>&1 | FileCheck %s --check-prefix=CHECK-cNULL
-// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 | FileCheck %s --check-prefix=CHECK-coCRASH
-// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t calloc-overflow 2>&1 | FileCheck %s --check-prefix=CHECK-coNULL
-// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t realloc 2>&1 | FileCheck %s --check-prefix=CHECK-rCRASH
-// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t realloc 2>&1 | FileCheck %s --check-prefix=CHECK-rNULL
-// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mrCRASH
-// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mrNULL
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mNULL
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cNULL
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coNULL
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rNULL
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrNULL
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnCRASH
+// RUN: MSAN_OPTIONS=allocator_may_return_null=1     %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnNULL
 
-#include <limits.h>
+// UNSUPPORTED: win32
+
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdio.h>
-#include <assert.h>
 #include <limits>
-int main(int argc, char **argv) {
-  volatile size_t size = std::numeric_limits<size_t>::max() - 10000;
-  assert(argc == 2);
-  char *x = 0;
-  if (!strcmp(argv[1], "malloc")) {
-    fprintf(stderr, "malloc:\n");
-    x = (char*)malloc(size);
-  }
-  if (!strcmp(argv[1], "calloc")) {
-    fprintf(stderr, "calloc:\n");
-    x = (char*)calloc(size / 4, 4);
-  }
+#include <new>
 
-  if (!strcmp(argv[1], "calloc-overflow")) {
-    fprintf(stderr, "calloc-overflow:\n");
+int main(int argc, char **argv) {
+  // Disable stderr buffering. Needed on Windows.
+  setvbuf(stderr, NULL, _IONBF, 0);
+
+  assert(argc == 2);
+  const char *action = argv[1];
+  fprintf(stderr, "%s:\n", action);
+
+  static const size_t kMaxAllowedMallocSizePlusOne =
+#if __LP64__ || defined(_WIN64)
+      (8UL << 30) + 1;
+#else
+      (2UL << 30) + 1;
+#endif
+
+  void *x = 0;
+  if (!strcmp(action, "malloc")) {
+    x = malloc(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "calloc")) {
+    x = calloc((kMaxAllowedMallocSizePlusOne / 4) + 1, 4);
+  } else if (!strcmp(action, "calloc-overflow")) {
     volatile size_t kMaxSizeT = std::numeric_limits<size_t>::max();
     size_t kArraySize = 4096;
     volatile size_t kArraySize2 = kMaxSizeT / kArraySize + 10;
-    x = (char*)calloc(kArraySize, kArraySize2);
-  }
-
-  if (!strcmp(argv[1], "realloc")) {
-    fprintf(stderr, "realloc:\n");
-    x = (char*)realloc(0, size);
-  }
-  if (!strcmp(argv[1], "realloc-after-malloc")) {
-    fprintf(stderr, "realloc-after-malloc:\n");
+    x = calloc(kArraySize, kArraySize2);
+  } else if (!strcmp(action, "realloc")) {
+    x = realloc(0, kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "realloc-after-malloc")) {
     char *t = (char*)malloc(100);
     *t = 42;
-    x = (char*)realloc(t, size);
+    x = realloc(t, kMaxAllowedMallocSizePlusOne);
     assert(*t == 42);
+    free(t);
+  } else if (!strcmp(action, "new")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "new-nothrow")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne, std::nothrow);
+  } else {
+    assert(0);
   }
+
+  fprintf(stderr, "errno: %d\n", errno);
+
   // The NULL pointer is printed differently on different systems, while (long)0
   // is always the same.
   fprintf(stderr, "x: %lx\n", (long)x);
+  free(x);
+
   return x != 0;
 }
+
 // CHECK-mCRASH: malloc:
 // CHECK-mCRASH: MemorySanitizer's allocator is terminating the process
 // CHECK-cCRASH: calloc:
@@ -68,14 +107,25 @@
 // CHECK-rCRASH: MemorySanitizer's allocator is terminating the process
 // CHECK-mrCRASH: realloc-after-malloc:
 // CHECK-mrCRASH: MemorySanitizer's allocator is terminating the process
+// CHECK-nCRASH: new:
+// CHECK-nCRASH: MemorySanitizer's allocator is terminating the process
+// CHECK-nnCRASH: new-nothrow:
+// CHECK-nnCRASH: MemorySanitizer's allocator is terminating the process
 
 // CHECK-mNULL: malloc:
+// CHECK-mNULL: errno: 12
 // CHECK-mNULL: x: 0
 // CHECK-cNULL: calloc:
+// CHECK-cNULL: errno: 12
 // CHECK-cNULL: x: 0
 // CHECK-coNULL: calloc-overflow:
+// CHECK-coNULL: errno: 12
 // CHECK-coNULL: x: 0
 // CHECK-rNULL: realloc:
+// CHECK-rNULL: errno: 12
 // CHECK-rNULL: x: 0
 // CHECK-mrNULL: realloc-after-malloc:
+// CHECK-mrNULL: errno: 12
 // CHECK-mrNULL: x: 0
+// CHECK-nnNULL: new-nothrow:
+// CHECK-nnNULL: x: 0
diff --git a/test/msan/chained_origin_memcpy.cc b/test/msan/chained_origin_memcpy.cc
index bfe50df..0c94f2b 100644
--- a/test/msan/chained_origin_memcpy.cc
+++ b/test/msan/chained_origin_memcpy.cc
@@ -50,7 +50,7 @@
 
 // CHECK: Uninitialized value was stored to memory at
 // CHECK-FULL-STACK: {{#1 .* in fn_h.*chained_origin_memcpy.cc:}}[[@LINE-15]]
-// CHECK-SHORT-STACK: {{#0 .* in __msan_memcpy .*msan_interceptors.cc:}}
+// CHECK-SHORT-STACK: {{#0 .* in __msan_memcpy.*msan_interceptors.cc:}}
 
 // CHECK: Uninitialized value was stored to memory at
 // CHECK-FULL-STACK: {{#0 .* in fn_g.*chained_origin_memcpy.cc:}}[[@LINE-29]]
diff --git a/test/msan/fread_fwrite.cc b/test/msan/fread_fwrite.cc
new file mode 100644
index 0000000..3d50034
--- /dev/null
+++ b/test/msan/fread_fwrite.cc
@@ -0,0 +1,34 @@
+// RUN: %clangxx_msan -g %s -o %t
+// RUN: not %t 2>&1 | FileCheck %s
+// RUN: %t 1
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int test_fread() {
+  FILE *f = fopen("/dev/zero", "r");
+  char c;
+  unsigned read = fread(&c, sizeof(c), 1, f);
+  fclose(f);
+  if (c == '1') // No error
+    return 1;
+  return 0;
+}
+
+int test_fwrite() {
+  FILE *f = fopen("/dev/null", "w");
+  char c;
+  if (fwrite(&c, sizeof(c), 1, f) != sizeof(c)) // BOOM
+    return 1;
+  return fclose(f);
+}
+
+int main(int argc, char *argv[]) {
+  if (argc > 1)
+    test_fread();
+  else
+    test_fwrite();
+  return 0;
+}
+
+// CHECK: Uninitialized bytes in __interceptor_fwrite at offset 0 inside
diff --git a/test/msan/getloadavg.cc b/test/msan/getloadavg.cc
new file mode 100644
index 0000000..7facd58
--- /dev/null
+++ b/test/msan/getloadavg.cc
@@ -0,0 +1,16 @@
+// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t
+
+#define _BSD_SOURCE
+#include <assert.h>
+#include <stdlib.h>
+
+#include <sanitizer/msan_interface.h>
+
+int main(void) {
+  double x[4];
+  int ret = getloadavg(x, 3);
+  assert(ret > 0);
+  assert(ret <= 3);
+  assert(__msan_test_shadow(x, sizeof(double) * ret) == -1);
+  assert(__msan_test_shadow(&x[ret], sizeof(double)) == 0);
+}
diff --git a/test/msan/ioctl.cc b/test/msan/ioctl.cc
index e21ef63..66ac6e9 100644
--- a/test/msan/ioctl.cc
+++ b/test/msan/ioctl.cc
@@ -8,7 +8,7 @@
 #include <unistd.h>
 
 int main(int argc, char **argv) {
-  int fd = socket(AF_INET, SOCK_DGRAM, 0);
+  int fd = socket(AF_UNIX, SOCK_DGRAM, 0);
 
   unsigned int z;
   int res = ioctl(fd, FIOGETOWN, &z);
diff --git a/test/msan/ioctl_custom.cc b/test/msan/ioctl_custom.cc
index 6df22d7..eaab633 100644
--- a/test/msan/ioctl_custom.cc
+++ b/test/msan/ioctl_custom.cc
@@ -14,7 +14,7 @@
 #include <unistd.h>
 
 int main(int argc, char **argv) {
-  int fd = socket(AF_INET, SOCK_STREAM, 0);
+  int fd = socket(AF_UNIX, SOCK_STREAM, 0);
 
   struct ifreq ifreqs[20];
   struct ifconf ifc;
diff --git a/test/msan/pr32842.c b/test/msan/pr32842.c
new file mode 100644
index 0000000..b0a05f7
--- /dev/null
+++ b/test/msan/pr32842.c
@@ -0,0 +1,22 @@
+// Regression test for https://bugs.llvm.org/show_bug.cgi?id=32842
+//
+// RUN: %clang_msan -g %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck  %s
+
+struct iphdr {
+  unsigned char pad1: 2, ihl:4, pad2: 2;
+};
+
+int raw_send_hdrinc(unsigned long int length) {
+  struct iphdr iph;
+  if (iph.ihl * 4 > length) {
+    return 1;
+  }
+  return 0;
+}
+
+int main(int argc, char *argv[]) {
+  return raw_send_hdrinc(12);
+}
+
+// CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
diff --git a/test/msan/strndup.cc b/test/msan/strndup.cc
new file mode 100644
index 0000000..d4b9af1
--- /dev/null
+++ b/test/msan/strndup.cc
@@ -0,0 +1,28 @@
+// RUN: %clangxx_msan %s -o %t && not %run %t 2>&1 | FileCheck --check-prefix=ON %s
+// RUN: %clangxx_msan %s -o %t && MSAN_OPTIONS=intercept_strndup=0 %run %t 2>&1 | FileCheck --check-prefix=OFF --allow-empty %s
+
+// When built as C on Linux, strndup is transformed to __strndup.
+// RUN: %clangxx_msan -O3 -xc %s -o %t && not %run %t 2>&1 | FileCheck --check-prefix=ON %s
+
+// UNSUPPORTED: win32
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sanitizer/msan_interface.h>
+
+int main(int argc, char **argv) {
+  char kString[4] = "abc";
+  __msan_poison(kString + 2, 1);
+  char *copy = strndup(kString, 4); // BOOM
+  assert(__msan_test_shadow(copy, 4) == 2); // Poisoning is preserved.
+  free(copy);
+  return 0;
+  // ON: Uninitialized bytes in __interceptor_{{(__)?}}strndup at offset 2 inside [{{.*}}, 4)
+  // ON: MemorySanitizer: use-of-uninitialized-value
+  // ON: #0 {{.*}}main {{.*}}strndup.cc:[[@LINE-6]]
+  // ON-LABEL: SUMMARY
+  // ON: {{.*}}strndup.cc:[[@LINE-8]]
+  // OFF-NOT: MemorySanitizer
+}
+
diff --git a/test/msan/wcsncpy.cc b/test/msan/wcsncpy.cc
new file mode 100644
index 0000000..6471371
--- /dev/null
+++ b/test/msan/wcsncpy.cc
@@ -0,0 +1,40 @@
+// RUN: %clangxx_msan -fsanitize-memory-track-origins -O0 %s -o %t && not %run %t >%t.out 2>&1
+// RUN: FileCheck %s < %t.out && FileCheck %s < %t.out
+
+// XFAIL: mips
+
+#include <assert.h>
+#include <wchar.h>
+
+#include <sanitizer/msan_interface.h>
+
+int main() {
+  const wchar_t *s = L"abc";
+  assert(wcslen(s) == 3);
+
+  wchar_t s2[5];
+  assert(wcsncpy(s2, s, 3) == s2);
+  assert(__msan_test_shadow(&s2, 5 * sizeof(wchar_t)) == 3 * sizeof(wchar_t));
+  assert(wcsncpy(s2, s, 5) == s2);
+  assert(__msan_test_shadow(&s2, 5 * sizeof(wchar_t)) == -1);
+
+  wchar_t s3[5];
+  assert(wcsncpy(s3, s, 2) == s3);
+  assert(__msan_test_shadow(&s3, 5 * sizeof(wchar_t)) == 2 * sizeof(wchar_t));
+
+  __msan_allocated_memory(&s2[1], sizeof(wchar_t));
+  wchar_t s4[5];
+  assert(wcsncpy(s4, s2, 3) == s4);
+  __msan_check_mem_is_initialized(&s4, sizeof(s4));
+}
+// CHECK:  Uninitialized bytes in __msan_check_mem_is_initialized
+// CHECK:  WARNING: MemorySanitizer: use-of-uninitialized-value
+// CHECK:    in main {{.*}}wcsncpy.cc:28
+
+// CHECK:  Uninitialized value was stored to memory at
+// CHECK:    in {{[^\s]*}}wcsncpy
+// CHECK:    in main {{.*}}wcsncpy.cc:27
+
+// CHECK:  Memory was marked as uninitialized
+// CHECK:    in __msan_allocated_memory
+// CHECK:    in main {{.*}}wcsncpy.cc:25
diff --git a/test/profile/Linux/counter_promo_for.c b/test/profile/Linux/counter_promo_for.c
new file mode 100644
index 0000000..3139646
--- /dev/null
+++ b/test/profile/Linux/counter_promo_for.c
@@ -0,0 +1,59 @@
+// RUN: rm -fr %t.promo.prof
+// RUN: rm -fr %t.nopromo.prof
+// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen -O2 %s
+// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen.ll -emit-llvm -S -O2 %s
+// RUN: cat %t.promo.gen.ll | FileCheck --check-prefix=PROMO %s
+// RUN: %run %t.promo.gen
+// RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/
+// RUN: llvm-profdata show --counts --all-functions %t.promo.profdata  > %t.promo.dump
+// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen -O2 %s
+// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s
+// RUN: cat %t.nopromo.gen.ll | FileCheck --check-prefix=NOPROMO %s
+// RUN: %run %t.nopromo.gen
+// RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/
+// RUN: llvm-profdata show --counts --all-functions %t.nopromo.profdata  > %t.nopromo.dump
+// RUN: diff %t.promo.profdata %t.nopromo.profdata
+
+int g;
+__attribute__((noinline)) void bar(int i) { g += i; }
+
+__attribute__((noinline)) void foo(int n, int N) {
+// PROMO-LABEL: @foo
+// PROMO: load{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// PROMO-NEXT: load{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// PROMO-NEXT: load{{.*}}@__profc_foo{{.*}} 2){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 2){{.*}}
+// PROMO: load{{.*}}@__profc_foo{{.*}} 3){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 3){{.*}}
+//
+// NOPROMO-LABEL: @foo
+// NOPROMO: load{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// NOPROMO-NEXT: add
+// NOPROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// NOPROMO: load{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// NOPROMO-NEXT: add
+// NOPROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// NOPROMO: load{{.*}}@__profc_foo{{.*}} 2){{.*}}
+// NOPROMO-NEXT: add
+// NOPROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 2){{.*}}
+  int i;
+  for (i = 0; i < N; i++) {
+    if (i < n + 1)
+      bar(1);
+    else if (i < n - 1)
+      bar(2);
+    else
+      bar(3);
+  }
+}
+
+int main() {
+  foo(10, 20); 
+  return 0;
+}
diff --git a/test/profile/Linux/counter_promo_nest.c b/test/profile/Linux/counter_promo_nest.c
new file mode 100644
index 0000000..0792f0c
--- /dev/null
+++ b/test/profile/Linux/counter_promo_nest.c
@@ -0,0 +1,48 @@
+// RUN: rm -fr %t.promo.prof
+// RUN: rm -fr %t.nopromo.prof
+// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen -O2 %s
+// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen.ll -emit-llvm -S -O2 %s
+// RUN: cat %t.promo.gen.ll | FileCheck --check-prefix=PROMO %s
+// RUN: %run %t.promo.gen
+// RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/
+// RUN: llvm-profdata show --counts --all-functions %t.promo.profdata  > %t.promo.dump
+// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen -O2 %s
+// RUN: %run %t.nopromo.gen
+// RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/
+// RUN: llvm-profdata show --counts --all-functions %t.nopromo.profdata  > %t.nopromo.dump
+// RUN: diff %t.promo.profdata %t.nopromo.profdata
+int g;
+__attribute__((noinline)) void bar() {
+ g++;
+}
+
+extern int printf(const char*,...);
+
+int c = 10;
+
+int main()
+// PROMO-LABEL: @main
+// PROMO: load{{.*}}@__profc_main{{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_main{{.*}}
+// PROMO-NEXT: load{{.*}}@__profc_main{{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_main{{.*}}
+{
+  int i, j, k;
+
+  g = 0;
+  for (i = 0; i < c; i++)
+    for (j = 0; j < c; j++)
+       for (k = 0; k < c; k++)
+           bar();
+
+  for (i = 0; i < c; i++)
+    for (j = 0; j < 10*c;j++)
+        bar();
+
+  for (i = 0; i < 100*c; i++)
+    bar();
+
+  return 0;
+}
diff --git a/test/profile/Linux/counter_promo_while.c b/test/profile/Linux/counter_promo_while.c
new file mode 100644
index 0000000..b4d4e7a
--- /dev/null
+++ b/test/profile/Linux/counter_promo_while.c
@@ -0,0 +1,55 @@
+// RUN: rm -fr %t.promo.prof
+// RUN: rm -fr %t.nopromo.prof
+// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen -O2 %s
+// RUN: %clang_pgogen=%t.promo.prof/ -o %t.promo.gen.ll -emit-llvm -S -O2 %s
+// RUN: cat %t.promo.gen.ll | FileCheck --check-prefix=PROMO %s
+// RUN: %run %t.promo.gen
+// RUN: llvm-profdata merge -o %t.promo.profdata %t.promo.prof/
+// RUN: llvm-profdata show --counts --all-functions %t.promo.profdata  > %t.promo.dump
+// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen -O2 %s
+// RUN: %clang_pgogen=%t.nopromo.prof/ -mllvm -do-counter-promotion=false -o %t.nopromo.gen.ll -emit-llvm -S -O2 %s
+// RUN: cat %t.nopromo.gen.ll | FileCheck --check-prefix=NOPROMO %s
+// RUN: %run %t.nopromo.gen
+// RUN: llvm-profdata merge -o %t.nopromo.profdata %t.nopromo.prof/
+// RUN: llvm-profdata show --counts --all-functions %t.nopromo.profdata  > %t.nopromo.dump
+// RUN: diff %t.promo.profdata %t.nopromo.profdata
+int g;
+__attribute__((noinline)) void bar(int i) { g += i; }
+__attribute__((noinline)) void foo(int n, int N) {
+// PROMO-LABEL: @foo
+// PROMO: load{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// PROMO-NEXT: load{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// PROMO-NEXT: load{{.*}}@__profc_foo{{.*}} 2){{.*}}
+// PROMO-NEXT: add
+// PROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 2){{.*}}
+//
+// NOPROMO-LABEL: @foo
+// NOPROMO: load{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// NOPROMO-NEXT: add
+// NOPROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 0){{.*}}
+// NOPROMO: load{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// NOPROMO-NEXT: add
+// NOPROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 1){{.*}}
+// NOPROMO: load{{.*}}@__profc_foo{{.*}} 2){{.*}}
+// NOPROMO-NEXT: add
+// NOPROMO-NEXT: store{{.*}}@__profc_foo{{.*}} 2){{.*}}
+  int i = 0;
+  while (i < N) {
+    if (i < n + 1)
+      bar(1);
+    else if (i < n - 1)
+      bar(2);
+    else
+      bar(3);
+    i++;
+  }
+}
+
+int main() {
+  foo(10, 20);
+  return 0;
+}
diff --git a/test/profile/Linux/instrprof-alloc.test b/test/profile/Linux/instrprof-alloc.test
index 752b108..4db7647 100644
--- a/test/profile/Linux/instrprof-alloc.test
+++ b/test/profile/Linux/instrprof-alloc.test
@@ -1,6 +1,6 @@
-// RUN: %clang_profgen -Xclang -fprofile-instrument=llvm  -fuse-ld=gold -Wl,-wrap,malloc -Wl,-wrap,calloc -o %t -O3 %S/../Inputs/instrprof-alloc.c
+// RUN: %clang_pgogen  -fuse-ld=gold -Wl,-wrap,malloc -Wl,-wrap,calloc -o %t -O3 %S/../Inputs/instrprof-alloc.c
 // RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t
 
-// RUN: %clang_profgen  -Xclang -fprofile-instrument=llvm -mllvm -vp-static-alloc=false -fuse-ld=gold -Wl,-wrap,malloc -Wl,-wrap,calloc -o %t.dyn -O3 %S/../Inputs/instrprof-alloc.c
+// RUN: %clang_pgogen  -mllvm -vp-static-alloc=false -fuse-ld=gold -Wl,-wrap,malloc -Wl,-wrap,calloc -o %t.dyn -O3 %S/../Inputs/instrprof-alloc.c
 // RUN: env LLVM_PROFILE_FILE=%t.profraw not %run %t.dyn
 
diff --git a/test/profile/Linux/instrprof-value-prof-warn.test b/test/profile/Linux/instrprof-value-prof-warn.test
index 26502cc..6ca1603 100644
--- a/test/profile/Linux/instrprof-value-prof-warn.test
+++ b/test/profile/Linux/instrprof-value-prof-warn.test
@@ -1,4 +1,4 @@
-RUN: %clang_profgen -O2 -mllvm -disable-vp=false -Xclang -fprofile-instrument=llvm -mllvm -vp-static-alloc=true -DSTRESS=1 -o %t.ir.warn  %S/../Inputs/instrprof-value-prof-real.c
+RUN: %clang_pgogen -O2 -mllvm -disable-vp=false -mllvm -vp-static-alloc=true -DSTRESS=1 -o %t.ir.warn  %S/../Inputs/instrprof-value-prof-real.c
 RUN: env LLVM_PROFILE_FILE=%t.ir.profraw LLVM_VP_MAX_NUM_VALS_PER_SITE=255  %run %t.ir.warn 2>&1 |FileCheck --check-prefix=WARNING %s
 #  Test that enough static counters have been allocated
 RUN: env LLVM_PROFILE_FILE=%t.ir.profraw LLVM_VP_MAX_NUM_VALS_PER_SITE=150  %run %t.ir.warn 2>&1 |FileCheck --check-prefix=NOWARNING --allow-empty %s
diff --git a/test/profile/Linux/prctl.c b/test/profile/Linux/prctl.c
deleted file mode 100644
index 43baf65..0000000
--- a/test/profile/Linux/prctl.c
+++ /dev/null
@@ -1,36 +0,0 @@
-// RUN: %clang_pgogen -O2 -o %t %s
-// RUN: rm -rf default_*.profraw
-// RUN: %run %t && sleep 1
-// RUN: llvm-profdata show default_*.profraw 2>&1 | FileCheck %s
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/prctl.h>
-#include <unistd.h>
-
-#define FAKE_COUNT_SZ 2000000
-/* fake counts to increse the profile size. */
-unsigned long long __attribute__((section("__llvm_prf_cnts")))
-counts[FAKE_COUNT_SZ];
-
-int main(int argc, char **argv) {
-  pid_t pid = fork();
-  if (pid == 0) {
-    int i;
-    int sum = 0;
-    /* child process: sleep 500us and get to runtime before the
-     * main process exits. */
-    prctl(PR_SET_PDEATHSIG, SIGKILL);
-    usleep(500);
-    for (i = 0; i < 5000; ++i)
-      sum += i * i * i;
-    printf("child process (%d): sum=%d\n", getpid(), sum);
-  } else if (pid > 0) {
-    /* parent process: sleep 100us to get into profile runtime first. */
-    usleep(100);
-  }
-  return 0;
-}
-
-// CHECK-NOT: Empty raw profile file
diff --git a/test/safestack/canary.c b/test/safestack/canary.c
index c6b81f2..1ceaa50 100644
--- a/test/safestack/canary.c
+++ b/test/safestack/canary.c
@@ -2,7 +2,8 @@
 // RUN: %run %t.nossp 2>&1 | FileCheck --check-prefix=NOSSP %s
 
 // RUN: %clang_safestack -fstack-protector-all -D_FORTIFY_SOURCE=0 -g %s -o %t.ssp
-// RUN: not --crash %run %t.ssp 2>&1 | FileCheck -check-prefix=SSP %s
+// RUN: env LIBC_FATAL_STDERR_=1 not --crash %run %t.ssp 2>&1 | \
+// RUN:     FileCheck -check-prefix=SSP %s
 
 // Test stack canaries on the unsafe stack.
 
diff --git a/test/safestack/lit.cfg b/test/safestack/lit.cfg
index d4ec73c..fb56729 100644
--- a/test/safestack/lit.cfg
+++ b/test/safestack/lit.cfg
@@ -16,7 +16,7 @@
 config.substitutions.append( ("%clang_safestack ", config.clang + " -O0 -fsanitize=safe-stack ") )
 
 if config.lto_supported:
-  config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=safe-stack '])))
+  config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-fsanitize=safe-stack '])))
 
 # SafeStack tests are currently supported on Linux, FreeBSD and Darwin only.
 if config.host_os not in ['Linux', 'FreeBSD', 'Darwin']:
diff --git a/test/sanitizer_common/TestCases/Linux/deepbind.cc b/test/sanitizer_common/TestCases/Linux/deepbind.cc
new file mode 100644
index 0000000..fc810ad
--- /dev/null
+++ b/test/sanitizer_common/TestCases/Linux/deepbind.cc
@@ -0,0 +1,12 @@
+// RUN: %clangxx %s -o %t && %run not %t 1 2>&1 | FileCheck %s
+// UNSUPPORTED: lsan, android
+
+#include <dlfcn.h>
+#include <stdio.h>
+#include <string>
+
+int main (int argc, char *argv[]) {
+  // CHECK: You are trying to dlopen a <arbitrary path> shared library with RTLD_DEEPBIND flag
+  void *lib = dlopen("<arbitrary path>", RTLD_NOW | RTLD_DEEPBIND);
+  return 0;
+}
diff --git a/test/sanitizer_common/TestCases/Linux/getpwnam_r_invalid_user.cc b/test/sanitizer_common/TestCases/Linux/getpwnam_r_invalid_user.cc
index c0d6cfe..5bee1fb 100644
--- a/test/sanitizer_common/TestCases/Linux/getpwnam_r_invalid_user.cc
+++ b/test/sanitizer_common/TestCases/Linux/getpwnam_r_invalid_user.cc
@@ -1,6 +1,8 @@
 // Regression test for a crash in getpwnam_r and similar interceptors.
 // RUN: %clangxx -O0 -g %s -o %t && %run %t
 
+// XFAIL: mips
+
 #include <assert.h>
 #include <errno.h>
 #include <pwd.h>
diff --git a/test/sanitizer_common/TestCases/Linux/iconv_test.c b/test/sanitizer_common/TestCases/Linux/iconv_test.c
new file mode 100644
index 0000000..08da34d
--- /dev/null
+++ b/test/sanitizer_common/TestCases/Linux/iconv_test.c
@@ -0,0 +1,28 @@
+// RUN: %clang %s -o %t && %run %t
+// Verify that even if iconv returned -1
+// we still treat the initialized part of outbuf as properly initialized.
+#include <iconv.h>
+#include <assert.h>
+#include <stdio.h>
+
+int main() {
+  iconv_t cd = iconv_open("UTF-8", "no");
+  assert(cd != (iconv_t)-1);
+  char in[11] = {0x7e, 0x7e, 0x5f, 0x53, 0x55, 0x3e,
+                 0x99, 0x3c, 0x7e, 0x7e, 0x7e};
+  fprintf(stderr, "cd: %p\n", (void*)cd);
+  char out[100];
+  char *inbuf = &in[0];
+  size_t inbytesleft = 11;
+  char *outbuf = &out[0];
+  size_t outbytesleft = 100;
+  int ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+  assert(ret == -1);
+  assert(outbuf - &out[0] == 10);
+  for (int i = 0; i < 10; i++) {
+    if (out[i] == 0x77) return 1;
+    fprintf(stderr, "OUT%d 0x%x -- OK\n", i, (unsigned char)out[i]);
+  }
+  iconv_close(cd);
+}
+
diff --git a/test/sanitizer_common/TestCases/Linux/mprobe.cc b/test/sanitizer_common/TestCases/Linux/mprobe.cc
new file mode 100644
index 0000000..57e5ba5
--- /dev/null
+++ b/test/sanitizer_common/TestCases/Linux/mprobe.cc
@@ -0,0 +1,42 @@
+// RUN: %clangxx %s -o %t && %run %t 2>&1 | FileCheck %s
+// UNSUPPORTED: android
+
+#include <stdio.h>
+#include <stdlib.h>
+#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 2)
+#include <mcheck.h>
+#else
+#define MCHECK_OK 0
+extern "C" int mcheck(void (*abortfunc)(int mstatus));
+extern "C" int mcheck_pedantic(void (*abortfunc)(int mstatus));
+extern "C" int mprobe(void *ptr);
+#endif
+
+void check_heap() {
+  void *p = malloc(1000);
+  int res = mprobe(p);
+  if (res == MCHECK_OK)
+    printf("Success!\n");
+  free(p);
+}
+
+int main(int argc, char *argv[]) {
+  void *p;
+  if (mcheck(NULL) != 0) {
+    fprintf(stderr, "mcheck() failed\n");
+    exit(EXIT_FAILURE);
+  }
+
+  check_heap();
+  // CHECK: Success!
+
+  if (mcheck_pedantic(NULL) != 0) {
+    fprintf(stderr, "mcheck_pedantic() failed\n");
+    exit(EXIT_FAILURE);
+  }
+
+  check_heap();
+  // CHECK: Success!
+
+  return 0;
+}
diff --git a/test/sanitizer_common/TestCases/Linux/sem_init_glibc.cc b/test/sanitizer_common/TestCases/Linux/sem_init_glibc.cc
index ff1ddc4..b7e8721 100644
--- a/test/sanitizer_common/TestCases/Linux/sem_init_glibc.cc
+++ b/test/sanitizer_common/TestCases/Linux/sem_init_glibc.cc
@@ -1,15 +1,19 @@
 // RUN: %clangxx -O0 -g %s -lutil -o %t && %run %t
 // This test depends on the glibc layout of struct sem_t and checks that we
 // don't leave sem_t::private uninitialized.
-// UNSUPPORTED: android
+// UNSUPPORTED: android, lsan-x86
 #include <features.h>
 #include <assert.h>
 #include <semaphore.h>
 #include <string.h>
 #include <stdint.h>
 
+// On powerpc64be semval_t must be 64 bits even with "old" versions of glibc.
+#if __PPC64__ && __BIG_ENDIAN__
+typedef uint64_t semval_t;
+
 // This condition needs to correspond to __HAVE_64B_ATOMICS macro in glibc.
-#if (defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__) || \
+#elif (defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__) || \
      defined(__s390x__) || defined(__sparc64__) || defined(__alpha__) || \
      defined(__ia64__) || defined(__m68k__)) && __GLIBC_PREREQ(2, 21)
 typedef uint64_t semval_t;
diff --git a/test/sanitizer_common/TestCases/Linux/signal_segv_handler.cc b/test/sanitizer_common/TestCases/Linux/signal_segv_handler.cc
index 643fb48..51e8bdb 100644
--- a/test/sanitizer_common/TestCases/Linux/signal_segv_handler.cc
+++ b/test/sanitizer_common/TestCases/Linux/signal_segv_handler.cc
@@ -1,4 +1,4 @@
-// RUN: %clangxx -O1 %s -o %t && TSAN_OPTIONS="flush_memory_ms=1 memory_limit_mb=1" ASAN_OPTIONS="handle_segv=0 allow_user_segv_handler=1" %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx -O1 %s -o %t && TSAN_OPTIONS="flush_memory_ms=1 memory_limit_mb=1" ASAN_OPTIONS="handle_segv=0" %run %t 2>&1 | FileCheck %s
 
 // JVM uses SEGV to preempt threads. All threads do a load from a known address
 // periodically. When runtime needs to preempt threads, it unmaps the page.
diff --git a/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc b/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
new file mode 100644
index 0000000..eb4deac
--- /dev/null
+++ b/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
@@ -0,0 +1,25 @@
+// RUN: %clangxx -O2 %s -o %t && %run %t 2>&1 | FileCheck %s
+
+#include <stdio.h>
+
+// getauxval() used instead of sysconf() in GetPageSize() is defined starting
+// glbc version 2.16.
+#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 16)
+extern "C" long sysconf(int name) {
+  fprintf(stderr, "sysconf wrapper called\n");
+  return 0;
+}
+#endif  // defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 16)
+
+int main() {
+  // All we need to check is that the sysconf() interceptor defined above was
+  // not called. Should it get called, it will crash right there, any
+  // instrumented code executed before sanitizer init is finished will crash
+  // accessing non-initialized sanitizer internals. Even if it will not crash
+  // in some configuration, it should never be called anyway.
+  fprintf(stderr, "Passed\n");
+  // CHECK-NOT: sysconf wrapper called
+  // CHECK: Passed
+  // CHECK-NOT: sysconf wrapper called
+  return 0;
+}
diff --git a/test/sanitizer_common/TestCases/Linux/unexpected_format_specifier_test.cc b/test/sanitizer_common/TestCases/Linux/unexpected_format_specifier_test.cc
new file mode 100644
index 0000000..f48cce8
--- /dev/null
+++ b/test/sanitizer_common/TestCases/Linux/unexpected_format_specifier_test.cc
@@ -0,0 +1,12 @@
+// RUN: %clang -w -O0 %s -o %t && %run %t 2>&1 | FileCheck %s
+// UNSUPPORTED: lsan
+// UNSUPPORTED: msan
+#include <stdio.h>
+int main() {
+  int a;
+  printf("%Q\n", 1);
+  printf("%Q\n", 1);
+  printf("%Q\n", 1);
+}
+// CHECK: unexpected format specifier in printf interceptor: %Q (reported once per process)
+// CHECK-NOT: unexpected format specifier in printf interceptor
diff --git a/test/sanitizer_common/TestCases/Linux/fpe.cc b/test/sanitizer_common/TestCases/Posix/fpe.cc
similarity index 100%
rename from test/sanitizer_common/TestCases/Linux/fpe.cc
rename to test/sanitizer_common/TestCases/Posix/fpe.cc
diff --git a/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc b/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc
index fdb68c0..12a56c7 100644
--- a/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc
+++ b/test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc
@@ -2,6 +2,13 @@
 
 // REQUIRES: stable-runtime
 
+// For standalone LSan on x86 we have a problem: compiler spills the address
+// of allocated at line 42 memory thus memory block allocated in Leak() function
+// ends up to be classified as reachable despite the fact we zero out 'sink' at
+// the last line of main function. The problem doesn't reproduce with ASan because
+// quarantine prohibits memory block reuse for different allocations.
+// XFAIL: lsan-x86
+
 #include <sanitizer/common_interface_defs.h>
 #include <stdio.h>
 
diff --git a/test/sanitizer_common/TestCases/Linux/weak_hook_test.cc b/test/sanitizer_common/TestCases/Posix/weak_hook_test.cc
similarity index 100%
rename from test/sanitizer_common/TestCases/Linux/weak_hook_test.cc
rename to test/sanitizer_common/TestCases/Posix/weak_hook_test.cc
diff --git a/test/sanitizer_common/TestCases/corelimit.cc b/test/sanitizer_common/TestCases/corelimit.cc
index 8f54940..0a86e5b 100644
--- a/test/sanitizer_common/TestCases/corelimit.cc
+++ b/test/sanitizer_common/TestCases/corelimit.cc
@@ -1,5 +1,5 @@
 // RUN: %clangxx -O0 %s -o %t && %run %t
-// XFAIL: lsan
+// UNSUPPORTED: lsan
 
 #include <assert.h>
 #include <sys/time.h>
diff --git a/test/sanitizer_common/TestCases/sanitizer_coverage_inline8bit_counter.cc b/test/sanitizer_common/TestCases/sanitizer_coverage_inline8bit_counter.cc
new file mode 100644
index 0000000..b7246eb
--- /dev/null
+++ b/test/sanitizer_common/TestCases/sanitizer_coverage_inline8bit_counter.cc
@@ -0,0 +1,23 @@
+// Tests -fsanitize-coverage=inline-8bit-counters
+//
+// REQUIRES: has_sancovcc,stable-runtime
+// UNSUPPORTED: i386-darwin
+//
+// RUN: %clangxx -O0 %s -fsanitize-coverage=inline-8bit-counters 2>&1
+
+#include <stdio.h>
+#include <assert.h>
+
+const char *first_counter;
+
+extern "C"
+void __sanitizer_cov_8bit_counters_init(const char *start, const char *end) {
+  printf("INIT: %p %p\n", start, end);
+  assert(end - start > 1);
+  first_counter = start;
+}
+
+int main() {
+  assert(first_counter);
+  assert(*first_counter == 1);
+}
diff --git a/test/sanitizer_common/TestCases/sanitizer_coverage_no_prune.cc b/test/sanitizer_common/TestCases/sanitizer_coverage_no_prune.cc
new file mode 100644
index 0000000..8751930
--- /dev/null
+++ b/test/sanitizer_common/TestCases/sanitizer_coverage_no_prune.cc
@@ -0,0 +1,15 @@
+// Tests -fsanitize-coverage=no-prune
+//
+// REQUIRES: has_sancovcc,stable-runtime
+// UNSUPPORTED: i386-darwin
+// XFAIL: tsan
+//
+// RUN: %clangxx -O0 %s -S -o - -emit-llvm -fsanitize-coverage=trace-pc,bb,no-prune 2>&1 | grep "call void @__sanitizer_cov_trace_pc" | count 3
+// RUN: %clangxx -O0 %s -S -o - -emit-llvm -fsanitize-coverage=trace-pc,bb          2>&1 | grep "call void @__sanitizer_cov_trace_pc" | count 2
+// RUN: %clangxx -O0 %s -S -o - -emit-llvm -fsanitize-coverage=trace-pc,no-prune    2>&1 | grep "call void @__sanitizer_cov_trace_pc" | count 4
+// RUN: %clangxx -O0 %s -S -o - -emit-llvm -fsanitize-coverage=trace-pc             2>&1 | grep "call void @__sanitizer_cov_trace_pc" | count 3
+
+void foo(int *a) {
+  if (a)
+    *a = 1;
+}
diff --git a/test/sanitizer_common/TestCases/sanitizer_coverage_symbolize.cc b/test/sanitizer_common/TestCases/sanitizer_coverage_symbolize.cc
index 48f32a7..28e2378 100644
--- a/test/sanitizer_common/TestCases/sanitizer_coverage_symbolize.cc
+++ b/test/sanitizer_common/TestCases/sanitizer_coverage_symbolize.cc
@@ -9,7 +9,6 @@
 // RUN: cd $DIR
 // RUN: %clangxx -O0 -fsanitize-coverage=trace-pc-guard %s -ldl -o %t
 // RUN: %env_tool_opts=coverage=1 %t 2>&1 | FileCheck %s
-// RUN: %env_tool_opts=coverage=1 SANCOV_OPTIONS=symbolize=0 %t 2>&1 | FileCheck %s --check-prefix=CHECK-NOSYM
 // RUN: rm -rf $DIR
 
 #include <stdio.h>
@@ -26,9 +25,4 @@
 }
 
 // CHECK: main
-// CHECK: SanitizerCoverage: ./sanitizer_coverage_symbolize.{{.*}}.sancov 2 PCs written
-// CHECK: call sancov
-
-// CHECK-NOSYM: main
-// CHECK-NOSYM: SanitizerCoverage: ./sanitizer_coverage_symbolize.{{.*}}.sancov 2 PCs written
-// CHECK-NOSYM-NOT: call sancov
+// CHECK: SanitizerCoverage: ./sanitizer_coverage_symbolize.{{.*}}.sancov: 2 PCs written
diff --git a/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-dso.cc b/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-dso.cc
index cf16ec3..6185177 100644
--- a/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-dso.cc
+++ b/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-dso.cc
@@ -1,7 +1,7 @@
 // Tests trace pc guard coverage collection.
 //
 // REQUIRES: has_sancovcc,stable-runtime
-// XFAIL: tsan,darwin,powerpc64,s390x
+// XFAIL: tsan,darwin,powerpc64,s390x,mips
 //
 // RUN: DIR=%t_workdir
 // RUN: CLANG_ARGS="-O0 -fsanitize-coverage=trace-pc-guard"
@@ -62,9 +62,9 @@
 // CHECK-NEXT: foo
 // CHECK-NEXT: bar
 // CHECK-NEXT: baz
-// CHECK-DAG: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.{{.*}}.sancov 2 PCs written
-// CHECK-DAG: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.{{.*}}_2.so.{{.*}}.sancov 1 PCs written
-// CHECK-DAG: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.{{.*}}_1.so.{{.*}}.sancov 1 PCs written
+// CHECK-DAG: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.{{.*}}.sancov: 2 PCs written
+// CHECK-DAG: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.{{.*}}_2.so.{{.*}}.sancov: 1 PCs written
+// CHECK-DAG: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard-dso.{{.*}}_1.so.{{.*}}.sancov: 1 PCs written
 //
 // CHECK-SANCOV: Ignoring {{.*}}_1.so and its coverage because __sanitizer_cov* functions were not found.
 // CHECK-SANCOV: Ignoring {{.*}}_2.so and its coverage because __sanitizer_cov* functions were not found.
diff --git a/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-init.cc b/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-init.cc
new file mode 100644
index 0000000..b92a513
--- /dev/null
+++ b/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard-init.cc
@@ -0,0 +1,73 @@
+// Tests trace pc guard coverage collection.
+//
+// REQUIRES: has_sancovcc,stable-runtime,x86_64-linux
+// XFAIL: tsan
+//
+// RUN: DIR=%t_workdir
+// RUN: CLANG_ARGS="-O0 -fsanitize-coverage=trace-pc-guard"
+// RUN: rm -rf $DIR
+// RUN: mkdir -p $DIR
+// RUN: cd $DIR
+// RUN: %clangxx -DSHARED1 $CLANG_ARGS -shared %s -o %t_1.so -fPIC
+// RUN: %clangxx -DSTATIC1 $CLANG_ARGS %s -c -o %t_2.o
+// RUN: %clangxx -DMAIN $CLANG_ARGS %s -o %t %t_1.so %t_2.o
+// RUN: %env_tool_opts=coverage=1 %t 2>&1 | FileCheck %s
+// RUN: rm -rf $DIR
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+extern "C" {
+  int bar();
+  int baz();
+}
+
+#ifdef MAIN
+
+extern "C" void __sanitizer_cov_trace_pc_guard_init(uint32_t *start, uint32_t *stop) {
+  fprintf(stderr, "__sanitizer_cov_trace_pc_guard_init\n");
+}
+
+extern "C" void __sanitizer_cov_trace_pc_guard(uint32_t *guard) { }
+
+
+int foo() {
+  fprintf(stderr, "foo\n");
+  return 1;
+}
+
+int main() {
+  fprintf(stderr, "main\n");
+  foo();
+  bar();
+  baz();
+}
+
+#endif // MAIN
+
+extern "C" {
+
+#ifdef SHARED1
+int bar() {
+  fprintf(stderr, "bar\n");
+  return 1;
+}
+#endif
+
+#ifdef STATIC1
+int baz() {
+  fprintf(stderr, "baz\n");
+  return 1;
+}
+#endif
+
+} // extern "C"
+
+// Init is called once per DSO.
+// CHECK: __sanitizer_cov_trace_pc_guard_init
+// CHECK-NEXT: __sanitizer_cov_trace_pc_guard_init
+// CHECK-NEXT: main
+// CHECK-NEXT: foo
+// CHECK-NEXT: bar
+// CHECK-NEXT: baz
diff --git a/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard.cc b/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard.cc
index 1b787f1..2d6d00b 100644
--- a/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard.cc
+++ b/test/sanitizer_common/TestCases/sanitizer_coverage_trace_pc_guard.cc
@@ -1,7 +1,8 @@
 // Tests trace pc guard coverage collection.
 //
 // REQUIRES: has_sancovcc,stable-runtime
-// XFAIL: tsan,darwin,powerpc64,s390x
+// UNSUPPORTED: i386-darwin
+// XFAIL: tsan,powerpc64,s390x,mips
 //
 // RUN: DIR=%t_workdir
 // RUN: rm -rf $DIR
@@ -33,9 +34,9 @@
 // CHECK: main
 // CHECK-NEXT: foo
 // CHECK-NEXT: foo
-// CHECK-NEXT: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard.{{.*}}.sancov 2 PCs written
+// CHECK-NEXT: SanitizerCoverage: ./sanitizer_coverage_trace_pc_guard.{{.*}}.sancov: 2 PCs written
 //
-// CHECK-SANCOV: sanitizer_coverage_trace_pc_guard.cc:22 foo
-// CHECK-SANCOV-NEXT: sanitizer_coverage_trace_pc_guard.cc:27 main
+// CHECK-SANCOV: sanitizer_coverage_trace_pc_guard.cc:23 foo
+// CHECK-SANCOV-NEXT: sanitizer_coverage_trace_pc_guard.cc:28 main
 //
 // CHECK-NOCOV-NOT: SanitizerCoverage
diff --git a/test/sanitizer_common/TestCases/symbolize_pc.cc b/test/sanitizer_common/TestCases/symbolize_pc.cc
index 0cc81e1..68a6733 100644
--- a/test/sanitizer_common/TestCases/symbolize_pc.cc
+++ b/test/sanitizer_common/TestCases/symbolize_pc.cc
@@ -1,6 +1,5 @@
 // RUN: %clangxx -O0 %s -o %t
 // RUN: %env_tool_opts=strip_path_prefix=/TestCases/ %run %t 2>&1 | FileCheck %s
-// UNSUPPORTED: i386-darwin
 //
 // Tests __sanitizer_symbolize_pc.
 #include <stdio.h>
diff --git a/test/sanitizer_common/TestCases/symbolize_stack.cc b/test/sanitizer_common/TestCases/symbolize_stack.cc
new file mode 100644
index 0000000..e50cdb0
--- /dev/null
+++ b/test/sanitizer_common/TestCases/symbolize_stack.cc
@@ -0,0 +1,28 @@
+// RUN: %clangxx -O0 %s -o %t && %run %t 2>&1 | FileCheck %s
+
+// Test that symbolizer does not crash on frame with large function name.
+
+#include <sanitizer/common_interface_defs.h>
+#include <vector>
+
+template <int N> struct A {
+  template <class T> void RecursiveTemplateFunction(const T &t);
+};
+
+template <int N>
+template <class T>
+__attribute__((noinline)) void A<N>::RecursiveTemplateFunction(const T &) {
+  std::vector<T> t;
+  return A<N - 1>().RecursiveTemplateFunction(t);
+}
+
+template <>
+template <class T>
+__attribute__((noinline)) void A<0>::RecursiveTemplateFunction(const T &) {
+  __sanitizer_print_stack_trace();
+}
+
+int main() {
+  // CHECK: {{vector<.*vector<.*vector<.*vector<.*vector<}}
+  A<10>().RecursiveTemplateFunction(0);
+}
diff --git a/test/sanitizer_common/ios_commands/iossim_compile.py b/test/sanitizer_common/ios_commands/iossim_compile.py
new file mode 100755
index 0000000..8fa480e
--- /dev/null
+++ b/test/sanitizer_common/ios_commands/iossim_compile.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+
+import os, sys, subprocess
+
+output = None
+output_type = 'executable'
+
+args = sys.argv[1:]
+while args:
+    arg = args.pop(0)
+    if arg == '-shared':
+        output_type = 'shared'
+    elif arg == '-dynamiclib':
+        output_type = 'dylib'
+    elif arg == '-c':
+        output_type = 'object'
+    elif arg == '-S':
+        output_type = 'assembly'
+    elif arg == '-o':
+        output = args.pop(0)
+
+if output == None:
+    print "No output file name!"
+    sys.exit(1)
+
+ret = subprocess.call(sys.argv[1:])
+if ret != 0:
+    sys.exit(ret)
+
+# If we produce a dylib, ad-hoc sign it.
+if output_type in ['shared', 'dylib']:
+    ret = subprocess.call(["codesign", "-s", "-", output])
diff --git a/test/sanitizer_common/ios_commands/iossim_env.py b/test/sanitizer_common/ios_commands/iossim_env.py
old mode 100644
new mode 100755
diff --git a/test/sanitizer_common/ios_commands/iossim_run.py b/test/sanitizer_common/ios_commands/iossim_run.py
old mode 100644
new mode 100755
index 732880f..47b847f
--- a/test/sanitizer_common/ios_commands/iossim_run.py
+++ b/test/sanitizer_common/ios_commands/iossim_run.py
@@ -8,8 +8,9 @@
 
 device_id = os.environ["SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER"]
 
-if "ASAN_OPTIONS" in os.environ:
-    os.environ["SIMCTL_CHILD_ASAN_OPTIONS"] = os.environ["ASAN_OPTIONS"]
+for e in ["ASAN_OPTIONS", "TSAN_OPTIONS"]:
+  if e in os.environ:
+    os.environ["SIMCTL_CHILD_" + e] = os.environ[e]
 
 exitcode = subprocess.call(["xcrun", "simctl", "spawn", device_id] + sys.argv[1:])
 if exitcode > 125:
diff --git a/test/sanitizer_common/lit.common.cfg b/test/sanitizer_common/lit.common.cfg
index b32fb1b..da720a8 100644
--- a/test/sanitizer_common/lit.common.cfg
+++ b/test/sanitizer_common/lit.common.cfg
@@ -26,6 +26,9 @@
 if config.target_arch not in ['arm', 'armhf', 'aarch64']:
   config.available_features.add('stable-runtime')
 
+if config.host_os == 'Linux' and config.tool_name == "lsan" and (config.target_arch == 'i386' or config.target_arch == 'i686'):
+  config.available_features.add("lsan-x86")
+
 if config.host_os == 'Darwin':
   # On Darwin, we default to `abort_on_error=1`, which would make tests run
   # much slower. Let's override this and run lit tests with 'abort_on_error=0'.
diff --git a/test/sanitizer_common/print_address.h b/test/sanitizer_common/print_address.h
index 018db61..db2e834 100644
--- a/test/sanitizer_common/print_address.h
+++ b/test/sanitizer_common/print_address.h
@@ -11,6 +11,8 @@
     // On FreeBSD, the %p conversion specifier works as 0x%x and thus does not
     // match to the format used in the diagnotic message.
     fprintf(stderr, "0x%012lx ", (unsigned long) p);
+#elif defined(__i386__) || defined(__arm__)
+    fprintf(stderr, "0x%08lx ", (unsigned long) p);
 #elif defined(__mips64)
     fprintf(stderr, "0x%010lx ", (unsigned long) p);
 #endif
diff --git a/test/scudo/alignment.cpp b/test/scudo/alignment.cpp
index a6eca87..125ad8c 100644
--- a/test/scudo/alignment.cpp
+++ b/test/scudo/alignment.cpp
@@ -14,8 +14,7 @@
   assert(argc == 2);
   if (!strcmp(argv[1], "pointers")) {
     void *p = malloc(1U << 16);
-    if (!p)
-      return 1;
+    assert(p);
     free(reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(p) | 1));
   }
   return 0;
diff --git a/test/scudo/double-free.cpp b/test/scudo/double-free.cpp
index 75919f0..ddc5205 100644
--- a/test/scudo/double-free.cpp
+++ b/test/scudo/double-free.cpp
@@ -16,30 +16,26 @@
   assert(argc == 2);
   if (!strcmp(argv[1], "malloc")) {
     void *p = malloc(sizeof(int));
-    if (!p)
-      return 1;
+    assert(p);
     free(p);
     free(p);
   }
   if (!strcmp(argv[1], "new")) {
     int *p = new int;
-    if (!p)
-      return 1;
+    assert(p);
     delete p;
     delete p;
   }
   if (!strcmp(argv[1], "newarray")) {
     int *p = new int[8];
-    if (!p)
-      return 1;
+    assert(p);
     delete[] p;
     delete[] p;
   }
   if (!strcmp(argv[1], "memalign")) {
     void *p = nullptr;
     posix_memalign(&p, 0x100, sizeof(int));
-    if (!p)
-      return 1;
+    assert(p);
     free(p);
     free(p);
   }
diff --git a/test/scudo/interface.cpp b/test/scudo/interface.cpp
index f935306..e9575ad 100644
--- a/test/scudo/interface.cpp
+++ b/test/scudo/interface.cpp
@@ -1,9 +1,13 @@
-// RUN: %clang_scudo %s -o %t
-// RUN: %run %t 2>&1
+// RUN: %clang_scudo %s -lstdc++ -o %t
+// RUN: %run %t ownership          2>&1
+// RUN: %run %t ownership-and-size 2>&1
+// RUN: %run %t heap-size          2>&1
 
 // Tests that the sanitizer interface functions behave appropriately.
 
 #include <stdlib.h>
+#include <assert.h>
+#include <string.h>
 
 #include <vector>
 
@@ -11,18 +15,33 @@
 
 int main(int argc, char **argv)
 {
-  void *p;
-  std::vector<ssize_t> sizes{1, 8, 16, 32, 1024, 32768,
-    1 << 16, 1 << 17, 1 << 20, 1 << 24};
-  for (size_t size : sizes) {
-    p = malloc(size);
-    if (!p)
-      return 1;
-    if (!__sanitizer_get_ownership(p))
-      return 1;
-    if (__sanitizer_get_allocated_size(p) < size)
-      return 1;
-    free(p);
+  assert(argc == 2);
+
+  if (!strcmp(argv[1], "ownership")) {
+    // Ensures that __sanitizer_get_ownership can be called before any other
+    // allocator function, and that it behaves properly on a pointer not owned
+    // by us.
+    assert(!__sanitizer_get_ownership(argv));
   }
+  if (!strcmp(argv[1], "ownership-and-size")) {
+    // Tests that __sanitizer_get_ownership and __sanitizer_get_allocated_size
+    // behave properly on chunks allocated by the Primary and Secondary.
+    void *p;
+    std::vector<ssize_t> sizes{1, 8, 16, 32, 1024, 32768,
+      1 << 16, 1 << 17, 1 << 20, 1 << 24};
+    for (size_t size : sizes) {
+      p = malloc(size);
+      assert(p);
+      assert(__sanitizer_get_ownership(p));
+      assert(__sanitizer_get_allocated_size(p) >= size);
+      free(p);
+    }
+  }
+  if (!strcmp(argv[1], "heap-size")) {
+    // Ensures that __sanitizer_get_heap_size can be called before any other
+    // allocator function.
+    assert(__sanitizer_get_heap_size() >= 0);
+  }
+
   return 0;
 }
diff --git a/test/scudo/lit.cfg b/test/scudo/lit.cfg
index 4eff2ce..adf16f5 100644
--- a/test/scudo/lit.cfg
+++ b/test/scudo/lit.cfg
@@ -19,14 +19,14 @@
 # C flags.
 c_flags = ([config.target_cflags] +
            ["-std=c++11",
-           "-lstdc++",
-           "-lrt",
-           "-latomic",
-           "-ldl",
            "-pthread",
            "-fPIE",
            "-pie",
-           "-O0"])
+           "-O0",
+           "-UNDEBUG",
+           "-ldl",
+           "-lrt",
+           "-Wl,--gc-sections"])
 
 def build_invocation(compile_flags):                                            
   return " " + " ".join([config.clang] + compile_flags) + " "                   
diff --git a/test/scudo/malloc.cpp b/test/scudo/malloc.cpp
index cafc744..50e5259 100644
--- a/test/scudo/malloc.cpp
+++ b/test/scudo/malloc.cpp
@@ -1,10 +1,11 @@
-// RUN: %clang_scudo %s -o %t
+// RUN: %clang_scudo %s -lstdc++ -o %t
 // RUN: %run %t 2>&1
 
 // Tests that a regular workflow of allocation, memory fill and free works as
 // intended. Tests various sizes serviced by the primary and secondary
 // allocators.
 
+#include <assert.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -18,8 +19,7 @@
   std::vector<int> offsets{1, 0, -1, -7, -8, -15, -16, -31, -32};
 
   p = malloc(0);
-  if (!p)
-    return 1;
+  assert(p);
   free(p);
   for (ssize_t size : sizes) {
     for (int offset: offsets) {
@@ -27,8 +27,7 @@
       if (actual_size <= 0)
         continue;
       p = malloc(actual_size);
-      if (!p)
-        return 1;
+      assert(p);
       memset(p, 0xff, actual_size);
       free(p);
     }
diff --git a/test/scudo/memalign.cpp b/test/scudo/memalign.cpp
index b407ec5..82c54af 100644
--- a/test/scudo/memalign.cpp
+++ b/test/scudo/memalign.cpp
@@ -1,11 +1,12 @@
 // RUN: %clang_scudo %s -o %t
-// RUN:     %run %t valid   2>&1
-// RUN: not %run %t invalid 2>&1 | FileCheck %s
+// RUN: %run %t valid   2>&1
+// RUN: %run %t invalid 2>&1
 
 // Tests that the various aligned allocation functions work as intended. Also
 // tests for the condition where the alignment is not a power of 2.
 
 #include <assert.h>
+#include <errno.h>
 #include <malloc.h>
 #include <stdlib.h>
 #include <string.h>
@@ -24,17 +25,16 @@
   void *p = nullptr;
   size_t alignment = 1U << 12;
   size_t size = 1U << 12;
+  int err;
 
   assert(argc == 2);
 
   if (!strcmp(argv[1], "valid")) {
     posix_memalign(&p, alignment, size);
-    if (!p)
-      return 1;
+    assert(p);
     free(p);
     p = aligned_alloc(alignment, size);
-    if (!p)
-      return 1;
+    assert(p);
     free(p);
     // Tests various combinations of alignment and sizes
     for (int i = (sizeof(void *) == 4) ? 3 : 4; i < 19; i++) {
@@ -43,8 +43,7 @@
         size = 0x800 * j;
         for (int k = 0; k < 3; k++) {
           p = memalign(alignment, size - (2 * sizeof(void *) * k));
-          if (!p)
-            return 1;
+          assert(p);
           free(p);
         }
       }
@@ -54,17 +53,28 @@
     for (int i = 19; i <= 24; i++) {
       for (int k = 0; k < 3; k++) {
         p = memalign(alignment, 0x1000 - (2 * sizeof(void *) * k));
-        if (!p)
-          return 1;
+        assert(p);
         free(p);
       }
     }
   }
   if (!strcmp(argv[1], "invalid")) {
+    // Alignment is not a power of 2.
     p = memalign(alignment - 1, size);
-    free(p);
+    assert(!p);
+    // Size is not a multiple of alignment.
+    p = aligned_alloc(alignment, size >> 1);
+    assert(!p);
+    void *p_unchanged = (void *)0x42UL;
+    p = p_unchanged;
+    // Alignment is not a power of 2.
+    err = posix_memalign(&p, 3, size);
+    assert(p == p_unchanged);
+    assert(err == EINVAL);
+    // Alignment is a power of 2, but not a multiple of size(void *).
+    err = posix_memalign(&p, 2, size);
+    assert(p == p_unchanged);
+    assert(err == EINVAL);
   }
   return 0;
 }
-
-// CHECK: ERROR: alignment is not a power of 2
diff --git a/test/scudo/mismatch.cpp b/test/scudo/mismatch.cpp
index 54cdafc..15dce83 100644
--- a/test/scudo/mismatch.cpp
+++ b/test/scudo/mismatch.cpp
@@ -10,29 +10,26 @@
 // caught when the related option is set.
 
 #include <assert.h>
+#include <malloc.h>
 #include <stdlib.h>
 #include <string.h>
-#include <malloc.h>
 
 int main(int argc, char **argv)
 {
   assert(argc == 2);
   if (!strcmp(argv[1], "mallocdel")) {
     int *p = (int *)malloc(16);
-    if (!p)
-      return 1;
+    assert(p);
     delete p;
   }
   if (!strcmp(argv[1], "newfree")) {
     int *p = new int;
-    if (!p)
-      return 1;
+    assert(p);
     free((void *)p);
   }
   if (!strcmp(argv[1], "memaligndel")) {
     int *p = (int *)memalign(16, 16);
-    if (!p)
-      return 1;
+    assert(p);
     delete p;
   }
   return 0;
diff --git a/test/scudo/options.cpp b/test/scudo/options.cpp
index bccf7c8..f4afe7d 100644
--- a/test/scudo/options.cpp
+++ b/test/scudo/options.cpp
@@ -6,8 +6,9 @@
 // Tests that the options can be passed using getScudoDefaultOptions, and that
 // the environment ones take precedence over them.
 
-#include <stdlib.h>
+#include <assert.h>
 #include <malloc.h>
+#include <stdlib.h>
 
 extern "C" const char* __scudo_default_options() {
   return "DeallocationTypeMismatch=0";  // Defaults to true in scudo_flags.inc.
@@ -16,8 +17,7 @@
 int main(int argc, char **argv)
 {
   int *p = (int *)malloc(16);
-  if (!p)
-    return 1;
+  assert(p);
   delete p;
   return 0;
 }
diff --git a/test/scudo/overflow.cpp b/test/scudo/overflow.cpp
index c93a544..d128245 100644
--- a/test/scudo/overflow.cpp
+++ b/test/scudo/overflow.cpp
@@ -10,20 +10,20 @@
 
 int main(int argc, char **argv)
 {
-  assert(argc == 2);
   ssize_t offset = sizeof(void *) == 8 ? 8 : 0;
+
+  assert(argc == 2);
+
   if (!strcmp(argv[1], "malloc")) {
     // Simulate a header corruption of an allocated chunk (1-bit)
     void *p = malloc(1U << 4);
-    if (!p)
-      return 1;
+    assert(p);
     ((char *)p)[-(offset + 1)] ^= 1;
     free(p);
   }
   if (!strcmp(argv[1], "quarantine")) {
     void *p = malloc(1U << 4);
-    if (!p)
-      return 1;
+    assert(p);
     free(p);
     // Simulate a header corruption of a quarantined chunk
     ((char *)p)[-(offset + 2)] ^= 1;
diff --git a/test/scudo/preinit.cpp b/test/scudo/preinit.cpp
index 34f61c9..b8c01a4 100644
--- a/test/scudo/preinit.cpp
+++ b/test/scudo/preinit.cpp
@@ -4,6 +4,7 @@
 // Verifies that calling malloc in a preinit_array function succeeds, and that
 // the resulting pointer can be freed at program termination.
 
+#include <assert.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -23,8 +24,7 @@
 int main(int argc, char **argv)
 {
   void *p = malloc(1);
-  if (!p)
-    return 1;
+  assert(p);
   free(p);
 
   return 0;
@@ -34,4 +34,3 @@
   void (*__local_preinit)(void) = __init;
 __attribute__((section(".fini_array"), used))
   void (*__local_fini)(void) = __fini;
-
diff --git a/test/scudo/quarantine.cpp b/test/scudo/quarantine.cpp
index 4ce0197..39ce1bd 100644
--- a/test/scudo/quarantine.cpp
+++ b/test/scudo/quarantine.cpp
@@ -1,43 +1,57 @@
 // RUN: %clang_scudo %s -o %t
-// RUN: SCUDO_OPTIONS=QuarantineSizeMb=1 %run %t 2>&1
+// RUN: SCUDO_OPTIONS="QuarantineSizeMb=0:ThreadLocalQuarantineSizeKb=0" %run %t zeroquarantine 2>&1
+// RUN: SCUDO_OPTIONS=QuarantineSizeMb=1                                 %run %t smallquarantine 2>&1
 
 // Tests that the quarantine prevents a chunk from being reused right away.
 // Also tests that a chunk will eventually become available again for
 // allocation when the recycling criteria has been met.
 
+#include <assert.h>
 #include <malloc.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include <sanitizer/allocator_interface.h>
+
 int main(int argc, char **argv)
 {
   void *p, *old_p;
-  size_t size = 1U << 16;
+  size_t allocated_bytes, size = 1U << 16;
 
-  // The delayed freelist will prevent a chunk from being available right away
-  p = malloc(size);
-  if (!p)
-    return 1;
-  old_p = p;
-  free(p);
-  p = malloc(size);
-  if (!p)
-    return 1;
-  if (old_p == p)
-    return 1;
-  free(p);
+  assert(argc == 2);
 
-  // Eventually the chunk should become available again
-  bool found = false;
-  for (int i = 0; i < 0x100 && found == false; i++) {
+  if (!strcmp(argv[1], "zeroquarantine")) {
+    // Verifies that a chunk is deallocated right away when the local and
+    // global quarantine sizes are 0.
+    allocated_bytes = __sanitizer_get_current_allocated_bytes();
     p = malloc(size);
-    if (!p)
-      return 1;
-    found = (p == old_p);
+    assert(p);
+    assert(__sanitizer_get_current_allocated_bytes() > allocated_bytes);
     free(p);
+    assert(__sanitizer_get_current_allocated_bytes() == allocated_bytes);
   }
-  if (found == false)
-    return 1;
+  if (!strcmp(argv[1], "smallquarantine")) {
+    // The delayed freelist will prevent a chunk from being available right
+    // away.
+    p = malloc(size);
+    assert(p);
+    old_p = p;
+    free(p);
+    p = malloc(size);
+    assert(p);
+    assert(old_p != p);
+    free(p);
+
+    // Eventually the chunk should become available again.
+    bool found = false;
+    for (int i = 0; i < 0x100 && found == false; i++) {
+      p = malloc(size);
+      assert(p);
+      found = (p == old_p);
+      free(p);
+    }
+    assert(found == true);
+  }
 
   return 0;
 }
diff --git a/test/scudo/random_shuffle.cpp b/test/scudo/random_shuffle.cpp
index fce522d..05a4326 100644
--- a/test/scudo/random_shuffle.cpp
+++ b/test/scudo/random_shuffle.cpp
@@ -7,7 +7,7 @@
 // RUN: %run %t 10000 > %T/random_shuffle_tmp_dir/out2
 // RUN: not diff %T/random_shuffle_tmp_dir/out?
 // RUN: rm -rf %T/random_shuffle_tmp_dir
-// UNSUPPORTED: i386-linux,i686-linux,arm-linux,armhf-linux
+// UNSUPPORTED: i386-linux,i686-linux,arm-linux,armhf-linux,aarch64-linux,mips-linux,mipsel-linux,mips64-linux,mips64el-linux
 
 // Tests that the allocator shuffles the chunks before returning to the user.
 
diff --git a/test/scudo/realloc.cpp b/test/scudo/realloc.cpp
index cc44595..da37720 100644
--- a/test/scudo/realloc.cpp
+++ b/test/scudo/realloc.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_scudo %s -o %t
+// RUN: %clang_scudo %s -lstdc++ -o %t
 // RUN:     %run %t pointers 2>&1
 // RUN:     %run %t contents 2>&1
 // RUN: not %run %t memalign 2>&1 | FileCheck %s
@@ -23,48 +23,41 @@
   std::vector<size_t> sizes{1, 16, 1024, 32768, 1 << 16, 1 << 17, 1 << 20};
 
   assert(argc == 2);
+
   for (size_t size : sizes) {
     if (!strcmp(argv[1], "pointers")) {
       old_p = p = realloc(nullptr, size);
-      if (!p)
-        return 1;
+      assert(p);
       size = malloc_usable_size(p);
       // Our realloc implementation will return the same pointer if the size
       // requested is lower than or equal to the usable size of the associated
       // chunk.
       p = realloc(p, size - 1);
-      if (p != old_p)
-        return 1;
+      assert(p == old_p);
       p = realloc(p, size);
-      if (p != old_p)
-        return 1;
+      assert(p == old_p);
       // And a new one if the size is greater.
       p = realloc(p, size + 1);
-      if (p == old_p)
-        return 1;
+      assert(p != old_p);
       // A size of 0 will free the chunk and return nullptr.
       p = realloc(p, 0);
-      if (p)
-        return 1;
+      assert(!p);
       old_p = nullptr;
     }
     if (!strcmp(argv[1], "contents")) {
       p = realloc(nullptr, size);
-      if (!p)
-        return 1;
+      assert(p);
       for (int i = 0; i < size; i++)
         reinterpret_cast<char *>(p)[i] = 'A';
       p = realloc(p, size + 1);
       // The contents of the reallocated chunk must match the original one.
       for (int i = 0; i < size; i++)
-        if (reinterpret_cast<char *>(p)[i] != 'A')
-          return 1;
+        assert(reinterpret_cast<char *>(p)[i] == 'A');
     }
     if (!strcmp(argv[1], "memalign")) {
       // A chunk coming from memalign cannot be reallocated.
       p = memalign(16, size);
-      if (!p)
-        return 1;
+      assert(p);
       p = realloc(p, size);
       free(p);
     }
diff --git a/test/scudo/secondary.cpp b/test/scudo/secondary.cpp
index 7a634a8..dc14f8c 100644
--- a/test/scudo/secondary.cpp
+++ b/test/scudo/secondary.cpp
@@ -5,12 +5,12 @@
 // Test that we hit a guard page when writing past the end of a chunk
 // allocated by the Secondary allocator, or writing too far in front of it.
 
+#include <assert.h>
 #include <malloc.h>
+#include <signal.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <signal.h>
-#include <assert.h>
 
 void handler(int signo, siginfo_t *info, void *uctx) {
   if (info->si_code == SEGV_ACCERR) {
@@ -33,8 +33,7 @@
   a.sa_flags = SA_SIGINFO;
 
   char *p = (char *)malloc(size);
-  if (!p)
-    return 1;
+  assert(p);
   memset(p, 'A', size); // This should not trigger anything.
   // Set up the SIGSEGV handler now, as the rest should trigger an AV.
   sigaction(SIGSEGV, &a, nullptr);
diff --git a/test/scudo/sized-delete.cpp b/test/scudo/sized-delete.cpp
index 5b1bf5f..e467f55 100644
--- a/test/scudo/sized-delete.cpp
+++ b/test/scudo/sized-delete.cpp
@@ -10,11 +10,12 @@
 // option is passed and the sizes do not match between allocation and
 // deallocation functions.
 
-#include <new>
 #include <assert.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include <new>
+
 int main(int argc, char **argv)
 {
   assert(argc == 2);
diff --git a/test/scudo/sizes.cpp b/test/scudo/sizes.cpp
index 7190cb6..a0994c2 100644
--- a/test/scudo/sizes.cpp
+++ b/test/scudo/sizes.cpp
@@ -1,8 +1,12 @@
-// RUN: %clang_scudo %s -o %t
+// RUN: %clang_scudo %s -lstdc++ -o %t
 // RUN: SCUDO_OPTIONS=allocator_may_return_null=0 not %run %t malloc 2>&1 | FileCheck %s
 // RUN: SCUDO_OPTIONS=allocator_may_return_null=1     %run %t malloc 2>&1
 // RUN: SCUDO_OPTIONS=allocator_may_return_null=0 not %run %t calloc 2>&1 | FileCheck %s
 // RUN: SCUDO_OPTIONS=allocator_may_return_null=1     %run %t calloc 2>&1
+// RUN: SCUDO_OPTIONS=allocator_may_return_null=0 not %run %t new 2>&1 | FileCheck %s
+// RUN: SCUDO_OPTIONS=allocator_may_return_null=1 not %run %t new 2>&1 | FileCheck %s
+// RUN: SCUDO_OPTIONS=allocator_may_return_null=0 not %run %t new-nothrow 2>&1 | FileCheck %s
+// RUN: SCUDO_OPTIONS=allocator_may_return_null=1     %run %t new-nothrow 2>&1
 // RUN:                                               %run %t usable 2>&1
 
 // Tests for various edge cases related to sizes, notably the maximum size the
@@ -15,46 +19,54 @@
 #include <string.h>
 
 #include <limits>
+#include <new>
 
-int main(int argc, char **argv)
-{
+int main(int argc, char **argv) {
   assert(argc == 2);
-  if (!strcmp(argv[1], "malloc")) {
-    // Currently the maximum size the allocator can allocate is 1ULL<<40 bytes.
-    size_t size = std::numeric_limits<size_t>::max();
-    void *p = malloc(size);
-    if (p)
-      return 1;
-    size = (1ULL << 40) - 16;
-    p = malloc(size);
-    if (p)
-      return 1;
-  }
-  if (!strcmp(argv[1], "calloc")) {
+  const char *action = argv[1];
+  fprintf(stderr, "%s:\n", action);
+
+#if __LP64__ || defined(_WIN64)
+  static const size_t kMaxAllowedMallocSize = 1ULL << 40;
+  static const size_t kChunkHeaderSize = 16;
+#else
+  static const size_t kMaxAllowedMallocSize = 2UL << 30;
+  static const size_t kChunkHeaderSize = 8;
+#endif
+
+  if (!strcmp(action, "malloc")) {
+    void *p = malloc(kMaxAllowedMallocSize);
+    assert(!p);
+    p = malloc(kMaxAllowedMallocSize - kChunkHeaderSize);
+    assert(!p);
+  } else if (!strcmp(action, "calloc")) {
     // Trigger an overflow in calloc.
     size_t size = std::numeric_limits<size_t>::max();
     void *p = calloc((size / 0x1000) + 1, 0x1000);
-    if (p)
-      return 1;
-  }
-  if (!strcmp(argv[1], "usable")) {
+    assert(!p);
+  } else if (!strcmp(action, "new")) {
+    void *p = operator new(kMaxAllowedMallocSize);
+    assert(!p);
+  } else if (!strcmp(action, "new-nothrow")) {
+    void *p = operator new(kMaxAllowedMallocSize, std::nothrow);
+    assert(!p);
+  } else if (!strcmp(action, "usable")) {
     // Playing with the actual usable size of a chunk.
     void *p = malloc(1007);
-    if (!p)
-      return 1;
+    assert(p);
     size_t size = malloc_usable_size(p);
-    if (size < 1007)
-      return 1;
+    assert(size >= 1007);
     memset(p, 'A', size);
     p = realloc(p, 2014);
-    if (!p)
-      return 1;
+    assert(p);
     size = malloc_usable_size(p);
-    if (size < 2014)
-      return 1;
+    assert(size >= 2014);
     memset(p, 'B', size);
     free(p);
+  } else {
+    assert(0);
   }
+
   return 0;
 }
 
diff --git a/test/scudo/threads.cpp b/test/scudo/threads.cpp
new file mode 100644
index 0000000..d9f4a86
--- /dev/null
+++ b/test/scudo/threads.cpp
@@ -0,0 +1,65 @@
+// RUN: %clang_scudo %s -o %t
+// RUN: SCUDO_OPTIONS="QuarantineSizeMb=0:ThreadLocalQuarantineSizeKb=0" %run %t 5 1000000 2>&1
+// RUN: SCUDO_OPTIONS="QuarantineSizeMb=1:ThreadLocalQuarantineSizeKb=64" %run %t 5 1000000 2>&1
+
+// Tests parallel allocations and deallocations of memory chunks from a number
+// of concurrent threads, with and without quarantine.
+// This test passes if everything executes properly without crashing.
+
+#include <assert.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <sanitizer/allocator_interface.h>
+
+int num_threads;
+int total_num_alloc;
+const int kMaxNumThreads = 500;
+pthread_t tid[kMaxNumThreads];
+
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+bool go = false;
+
+void *thread_fun(void *arg) {
+  pthread_mutex_lock(&mutex);
+  while (!go) pthread_cond_wait(&cond, &mutex);
+  pthread_mutex_unlock(&mutex);
+  for (int i = 0; i < total_num_alloc / num_threads; i++) {
+    void *p = malloc(10);
+    __asm__ __volatile__("" : : "r"(p) : "memory");
+    free(p);
+  }
+  return 0;
+}
+
+int main(int argc, char** argv) {
+  assert(argc == 3);
+  num_threads = atoi(argv[1]);
+  assert(num_threads > 0);
+  assert(num_threads <= kMaxNumThreads);
+  total_num_alloc = atoi(argv[2]);
+  assert(total_num_alloc > 0);
+
+  printf("%d threads, %d allocations in each\n", num_threads,
+         total_num_alloc / num_threads);
+  fprintf(stderr, "Heap size before: %zd\n", __sanitizer_get_heap_size());
+  fprintf(stderr, "Allocated bytes before: %zd\n",
+          __sanitizer_get_current_allocated_bytes());
+
+  for (int i = 0; i < num_threads; i++)
+    pthread_create(&tid[i], 0, thread_fun, 0);
+  pthread_mutex_lock(&mutex);
+  go = true;
+  pthread_cond_broadcast(&cond);
+  pthread_mutex_unlock(&mutex);
+  for (int i = 0; i < num_threads; i++)
+    pthread_join(tid[i], 0);
+
+  fprintf(stderr, "Heap size after: %zd\n", __sanitizer_get_heap_size());
+  fprintf(stderr, "Allocated bytes after: %zd\n",
+          __sanitizer_get_current_allocated_bytes());
+
+  return 0;
+}
diff --git a/test/tsan/CMakeLists.txt b/test/tsan/CMakeLists.txt
index 2db6ce0..a689086 100644
--- a/test/tsan/CMakeLists.txt
+++ b/test/tsan/CMakeLists.txt
@@ -1,3 +1,5 @@
+set(TSAN_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+
 set(TSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
 if(${COMPILER_RT_DEFAULT_TARGET_ARCH} MATCHES "x86_64")
   list(APPEND TSAN_TEST_DEPS GotsanRuntimeCheck)
@@ -22,6 +24,11 @@
 endif()
 
 foreach(arch ${TSAN_TEST_ARCH})
+  set(TSAN_TEST_IOS "0")
+  pythonize_bool(TSAN_TEST_IOS)
+  set(TSAN_TEST_IOSSIM "0")
+  pythonize_bool(TSAN_TEST_IOSSIM)
+
   set(TSAN_TEST_TARGET_ARCH ${arch})
   string(TOLOWER "-${arch}" TSAN_TEST_CONFIG_SUFFIX)
   get_test_cc_for_arch(${arch} TSAN_TEST_TARGET_CC TSAN_TEST_TARGET_CFLAGS)
@@ -35,6 +42,53 @@
   list(APPEND TSAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
 endforeach()
 
+# iOS and iOS simulator test suites
+# These are not added into "check-all", in order to run these tests, use
+# "check-tsan-iossim-x86_64" and similar. They also require an extra environment
+# variable to select which iOS device or simulator to use, e.g.:
+# SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER="iPhone 6"
+if(APPLE)
+  set(EXCLUDE_FROM_ALL ON)
+
+  set(TSAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER})
+  set(TSAN_TEST_IOS "1")
+  pythonize_bool(TSAN_TEST_IOS)
+
+  set(arch "x86_64")
+  set(TSAN_TEST_IOSSIM "1")
+  pythonize_bool(TSAN_TEST_IOSSIM)
+  set(TSAN_TEST_TARGET_ARCH ${arch})
+  set(TSAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_iossim_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}")
+  set(TSAN_TEST_CONFIG_SUFFIX "-${arch}-iossim")
+  string(TOUPPER ${arch} ARCH_UPPER_CASE)
+  set(CONFIG_NAME "IOSSim${ARCH_UPPER_CASE}Config")
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg
+    )
+  add_lit_testsuite(check-tsan-iossim-${arch} "ThreadSanitizer iOS Simulator ${arch} tests"
+    ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/
+    DEPENDS ${TSAN_TEST_DEPS})
+
+  set(arch "arm64")
+  set(TSAN_TEST_IOSSIM "0")
+  pythonize_bool(TSAN_TEST_IOSSIM)
+  set(TSAN_TEST_TARGET_ARCH ${arch})
+  set(TSAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_ios_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}")
+  set(TSAN_TEST_CONFIG_SUFFIX "-${arch}-ios")
+  string(TOUPPER ${arch} ARCH_UPPER_CASE)
+  set(CONFIG_NAME "IOS${ARCH_UPPER_CASE}Config")
+  configure_lit_site_cfg(
+    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+    ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg
+    )
+  add_lit_testsuite(check-tsan-ios-${arch} "ThreadSanitizer iOS Simulator ${arch} tests"
+    ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/
+    DEPENDS ${TSAN_TEST_DEPS})
+
+  set(EXCLUDE_FROM_ALL OFF)
+endif()
+
 if(COMPILER_RT_INCLUDE_TESTS)
   configure_lit_site_cfg(
     ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in
diff --git a/test/tsan/debug_external.cc b/test/tsan/Darwin/debug_external.cc
similarity index 92%
rename from test/tsan/debug_external.cc
rename to test/tsan/Darwin/debug_external.cc
index 1b340b2..2418a27 100644
--- a/test/tsan/debug_external.cc
+++ b/test/tsan/Darwin/debug_external.cc
@@ -6,7 +6,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "test.h"
+#include "../test.h"
 
 extern "C" {
 void __tsan_on_report(void *report);
@@ -17,8 +17,6 @@
                           unsigned long trace_size);
 int __tsan_get_report_loc_object_type(void *report, unsigned long idx,
                                       const char **object_type);
-void *__tsan_external_register_tag(const char *object_type);
-void __tsan_external_assign_tag(void *addr, void *tag);
 }
 
 void *Thread(void *arg) {
diff --git a/test/tsan/Darwin/dlopen.cc b/test/tsan/Darwin/dlopen.cc
index 7382a6d..3d12b81 100644
--- a/test/tsan/Darwin/dlopen.cc
+++ b/test/tsan/Darwin/dlopen.cc
@@ -4,6 +4,8 @@
 
 // REQUIRES: osx-autointerception
 
+// XFAIL: ios
+
 // RUN: %clangxx_tsan %s -o %t.so -shared -DSHARED_LIB
 // RUN: %clangxx_tsan -fno-sanitize=thread %s -o %t
 
diff --git a/test/tsan/Darwin/external-dups.cc b/test/tsan/Darwin/external-dups.cc
index b276977..ca1eb3e 100644
--- a/test/tsan/Darwin/external-dups.cc
+++ b/test/tsan/Darwin/external-dups.cc
@@ -5,14 +5,6 @@
 
 #import "../test.h"
 
-extern "C" {
-void *__tsan_external_register_tag(const char *object_type);
-void *__tsan_external_assign_tag(void *addr, void *tag);
-void __tsan_external_read(void *addr, void *caller_pc, void *tag);
-void __tsan_external_write(void *addr, void *caller_pc, void *tag);
-void __tsan_write8(void *addr);
-}
-
 void *tag;
 
 __attribute__((no_sanitize("thread")))
@@ -36,7 +28,7 @@
       barrier_wait(&barrier);
       ExternalWrite(opaque_object);
     });
-    // CHECK: WARNING: ThreadSanitizer: race on a library object
+    // CHECK: WARNING: ThreadSanitizer: race on HelloWorld
     t1.join();
     t2.join();
   }
@@ -54,7 +46,7 @@
       barrier_wait(&barrier);
       ExternalWrite(opaque_object);
     });
-    // CHECK: WARNING: ThreadSanitizer: race on a library object
+    // CHECK: WARNING: ThreadSanitizer: race on HelloWorld
     t1.join();
     t2.join();
   }
diff --git a/test/tsan/Darwin/external-swift.cc b/test/tsan/Darwin/external-swift.cc
index 81fa9e8..f6f9e7f 100644
--- a/test/tsan/Darwin/external-swift.cc
+++ b/test/tsan/Darwin/external-swift.cc
@@ -5,15 +5,12 @@
 
 #import "../test.h"
 
-static void *tag = (void *)0x1;
 extern "C" {
-void *__tsan_external_register_tag(const char *object_type);
-void *__tsan_external_assign_tag(void *addr, void *tag);
-void __tsan_external_read(void *addr, void *caller_pc, void *tag);
-void __tsan_external_write(void *addr, void *caller_pc, void *tag);
 void __tsan_write8(void *addr);
 }
 
+static void *tag = (void *)0x1;
+
 __attribute__((no_sanitize("thread")))
 void ExternalWrite(void *addr) {
   __tsan_external_write(addr, nullptr, tag);
@@ -40,8 +37,9 @@
       ExternalWrite(opaque_object);
     });
     // CHECK: WARNING: ThreadSanitizer: Swift access race
-    // CHECK: Modifying access at {{.*}} by thread {{.*}}
-    // CHECK: Previous modifying access at {{.*}} by thread {{.*}}
+    // CHECK: Modifying access of Swift variable at {{.*}} by thread {{.*}}
+    // CHECK: Previous modifying access of Swift variable at {{.*}} by thread {{.*}}
+    // CHECK: SUMMARY: ThreadSanitizer: Swift access race
     t1.join();
     t2.join();
   }
@@ -61,7 +59,8 @@
     });
     // CHECK: WARNING: ThreadSanitizer: Swift access race
     // CHECK: Write of size 8 at {{.*}} by thread {{.*}}
-    // CHECK: Previous modifying access at {{.*}} by thread {{.*}}
+    // CHECK: Previous modifying access of Swift variable at {{.*}} by thread {{.*}}
+    // CHECK: SUMMARY: ThreadSanitizer: Swift access race
     t1.join();
     t2.join();
   }
@@ -80,8 +79,9 @@
       ExternalWrite(opaque_object);
     });
     // CHECK: WARNING: ThreadSanitizer: Swift access race
-    // CHECK: Modifying access at {{.*}} by thread {{.*}}
+    // CHECK: Modifying access of Swift variable at {{.*}} by thread {{.*}}
     // CHECK: Previous write of size 8 at {{.*}} by thread {{.*}}
+    // CHECK: SUMMARY: ThreadSanitizer: Swift access race
     t1.join();
     t2.join();
   }
diff --git a/test/tsan/Darwin/external.cc b/test/tsan/Darwin/external.cc
index 3e6a761..e72281a 100644
--- a/test/tsan/Darwin/external.cc
+++ b/test/tsan/Darwin/external.cc
@@ -36,25 +36,13 @@
   void ObjectWriteAnother(MyObject *, long);
 }
 
-void UserCodeRead(MyObjectRef ref) {
-  ObjectRead(ref);
-}
-
-void UserCodeWrite(MyObjectRef ref, long val) {
-  ObjectWrite(ref, val);
-}
-
-void UserCodeWriteAnother(MyObjectRef ref, long val) {
-  ObjectWriteAnother(ref, val);
-}
-
 int main(int argc, char *argv[]) {
   InitializeLibrary();
   
   {
     MyObjectRef ref = ObjectCreate();
-    std::thread t1([ref]{ UserCodeRead(ref); });
-    std::thread t2([ref]{ UserCodeRead(ref); });
+    std::thread t1([ref]{ ObjectRead(ref); });
+    std::thread t2([ref]{ ObjectRead(ref); });
     t1.join();
     t2.join();
   }
@@ -63,11 +51,11 @@
   
   fprintf(stderr, "RR test done\n");
   // CHECK: RR test done
-  
+
   {
     MyObjectRef ref = ObjectCreate();
-    std::thread t1([ref]{ UserCodeRead(ref); });
-    std::thread t2([ref]{ UserCodeWrite(ref, 66); });
+    std::thread t1([ref]{ ObjectRead(ref); });
+    std::thread t2([ref]{ ObjectWrite(ref, 66); });
     t1.join();
     t2.join();
   }
@@ -79,23 +67,22 @@
   
   // TEST2-NOT: WARNING: ThreadSanitizer
   
-  // TEST3: WARNING: ThreadSanitizer: race on a library object
-  // TEST3: {{Mutating|read-only}} access of object MyLibrary::MyObject at
-  // TEST3: * #1 {{UserCodeWrite|UserCodeRead}}
-  // TEST3: Previous {{mutating|read-only}} access of object MyLibrary::MyObject at
-  // TEST3: * #1 {{UserCodeWrite|UserCodeRead}}
-  // TEST3: Issue is caused by frames marked with "*".
-  // TEST3: Location is MyLibrary::MyObject object of size 16 at
+  // TEST3: WARNING: ThreadSanitizer: race on MyLibrary::MyObject
+  // TEST3: {{Modifying|read-only}} access of MyLibrary::MyObject at
+  // TEST3: {{ObjectWrite|ObjectRead}}
+  // TEST3: Previous {{modifying|read-only}} access of MyLibrary::MyObject at
+  // TEST3: {{ObjectWrite|ObjectRead}}
+  // TEST3: Location is MyLibrary::MyObject of size 16 at
   // TEST3: {{ObjectCreate}}
-  // TEST3: SUMMARY: ThreadSanitizer: race on a library object {{.*}}external.cc{{.*}}{{UserCodeWrite|UserCodeRead}}
-  
+  // TEST3: SUMMARY: ThreadSanitizer: race on MyLibrary::MyObject {{.*}} in {{ObjectWrite|ObjectRead}}
+
   fprintf(stderr, "RW test done\n");
   // CHECK: RW test done
-  
+
   {
     MyObjectRef ref = ObjectCreate();
-    std::thread t1([ref]{ UserCodeWrite(ref, 76); });
-    std::thread t2([ref]{ UserCodeWriteAnother(ref, 77); });
+    std::thread t1([ref]{ ObjectWrite(ref, 76); });
+    std::thread t2([ref]{ ObjectWriteAnother(ref, 77); });
     t1.join();
     t2.join();
   }
@@ -104,16 +91,15 @@
   
   // TEST2-NOT: WARNING: ThreadSanitizer
   
-  // TEST3: WARNING: ThreadSanitizer: race on a library object
-  // TEST3: Mutating access of object MyLibrary::MyObject at
-  // TEST3: * #1 {{UserCodeWrite|UserCodeWriteAnother}}
-  // TEST3: Previous mutating access of object MyLibrary::MyObject at
-  // TEST3: * #1 {{UserCodeWrite|UserCodeWriteAnother}}
-  // TEST3: Issue is caused by frames marked with "*".
-  // TEST3: Location is MyLibrary::MyObject object of size 16 at
+  // TEST3: WARNING: ThreadSanitizer: race on MyLibrary::MyObject
+  // TEST3: Modifying access of MyLibrary::MyObject at
+  // TEST3: {{ObjectWrite|ObjectWriteAnother}}
+  // TEST3: Previous modifying access of MyLibrary::MyObject at
+  // TEST3: {{ObjectWrite|ObjectWriteAnother}}
+  // TEST3: Location is MyLibrary::MyObject of size 16 at
   // TEST3: {{ObjectCreate}}
-  // TEST3: SUMMARY: ThreadSanitizer: race on a library object {{.*}}external.cc{{.*}}{{UserCodeWrite|UserCodeWriteAnother}}
-  
+  // TEST3: SUMMARY: ThreadSanitizer: race on MyLibrary::MyObject {{.*}} in {{ObjectWrite|ObjectWriteAnother}}
+
   fprintf(stderr, "WW test done\n");
   // CHECK: WW test done
 }
diff --git a/test/tsan/Darwin/ignore-noninstrumented.mm b/test/tsan/Darwin/ignore-noninstrumented.mm
index 528e07b..668a76a 100644
--- a/test/tsan/Darwin/ignore-noninstrumented.mm
+++ b/test/tsan/Darwin/ignore-noninstrumented.mm
@@ -1,4 +1,4 @@
-// Check that ignore_noninstrumented_modules=1 supresses races from system libraries on OS X.
+// Check that ignore_noninstrumented_modules=1 suppresses races from system libraries on OS X.
 
 // RUN: %clang_tsan %s -o %t -framework Foundation
 
diff --git a/test/tsan/Darwin/ignored-interceptors.mm b/test/tsan/Darwin/ignored-interceptors.mm
index 1105132..b2e40f0 100644
--- a/test/tsan/Darwin/ignored-interceptors.mm
+++ b/test/tsan/Darwin/ignored-interceptors.mm
@@ -1,4 +1,4 @@
-// Check that ignore_interceptors_accesses=1 supresses reporting races from
+// Check that ignore_interceptors_accesses=1 suppresses reporting races from
 // system libraries on OS X. There are currently false positives coming from
 // libxpc, libdispatch, CoreFoundation and others, because these libraries use
 // TSan-invisible atomics as synchronization.
diff --git a/test/tsan/Darwin/main_tid.mm b/test/tsan/Darwin/main_tid.mm
index af658e4..6dea58e 100644
--- a/test/tsan/Darwin/main_tid.mm
+++ b/test/tsan/Darwin/main_tid.mm
@@ -8,7 +8,7 @@
 extern "C" {
 void __tsan_on_report(void *report);
 int __tsan_get_report_thread(void *report, unsigned long idx, int *tid,
-                             unsigned long *os_id, int *running,
+                             uint64_t *os_id, int *running,
                              const char **name, int *parent_tid, void **trace,
                              unsigned long trace_size);
 }
@@ -17,7 +17,7 @@
   fprintf(stderr, "__tsan_on_report(%p)\n", report);
 
   int tid;
-  unsigned long os_id;
+  uint64_t os_id;
   int running;
   const char *name;
   int parent_tid;
diff --git a/test/tsan/Darwin/osspinlock-norace.cc b/test/tsan/Darwin/osspinlock-norace.cc
index 2ac3989..5de02c2 100644
--- a/test/tsan/Darwin/osspinlock-norace.cc
+++ b/test/tsan/Darwin/osspinlock-norace.cc
@@ -1,8 +1,12 @@
 // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
-#include <libkern/OSAtomic.h>
 #include <pthread.h>
+#include <stdint.h>
 #include <stdio.h>
 
+typedef int32_t OSSpinLock;
+extern "C" void OSSpinLockLock(OSSpinLock *);
+extern "C" void OSSpinLockUnlock(OSSpinLock *);
+
 int Global;
 OSSpinLock lock;
 
diff --git a/test/tsan/Darwin/xpc-cancel.mm b/test/tsan/Darwin/xpc-cancel.mm
index 91dafc3..ac7aed0 100644
--- a/test/tsan/Darwin/xpc-cancel.mm
+++ b/test/tsan/Darwin/xpc-cancel.mm
@@ -1,7 +1,7 @@
 // RUN: %clang_tsan %s -o %t -framework Foundation
 // RUN: %run %t 2>&1 | FileCheck %s
 
-// XFAIL: ios
+// UNSUPPORTED: ios
 
 #import <Foundation/Foundation.h>
 #import <xpc/xpc.h>
diff --git a/test/tsan/Darwin/xpc-race.mm b/test/tsan/Darwin/xpc-race.mm
index 4b037e1..a1e214c 100644
--- a/test/tsan/Darwin/xpc-race.mm
+++ b/test/tsan/Darwin/xpc-race.mm
@@ -1,7 +1,7 @@
 // RUN: %clang_tsan %s -o %t -framework Foundation
 // RUN: %deflake %run %t 2>&1 | FileCheck %s
 
-// XFAIL: ios
+// UNSUPPORTED: ios
 
 #import <Foundation/Foundation.h>
 #import <xpc/xpc.h>
@@ -76,8 +76,8 @@
 // CHECK: Hello world.
 // CHECK: WARNING: ThreadSanitizer: data race
 // CHECK:   Write of size 8
-// CHECK:     #0 {{.*}}xpc-race.mm:34
+// CHECK:     #0 {{.*}}xpc-race.mm:36
 // CHECK:   Previous write of size 8
-// CHECK:     #0 {{.*}}xpc-race.mm:34
+// CHECK:     #0 {{.*}}xpc-race.mm:36
 // CHECK: Location is global 'global'
 // CHECK: Done.
diff --git a/test/tsan/Darwin/xpc.mm b/test/tsan/Darwin/xpc.mm
index c5e78a5..036841e 100644
--- a/test/tsan/Darwin/xpc.mm
+++ b/test/tsan/Darwin/xpc.mm
@@ -1,7 +1,7 @@
 // RUN: %clang_tsan %s -o %t -framework Foundation
 // RUN: %run %t 2>&1 | FileCheck %s
 
-// XFAIL: ios
+// UNSUPPORTED: ios
 
 #import <Foundation/Foundation.h>
 #import <xpc/xpc.h>
diff --git a/test/tsan/Linux/check_memcpy.cc b/test/tsan/Linux/check_memcpy.cc
index 8ad04c0..b81efa4 100644
--- a/test/tsan/Linux/check_memcpy.cc
+++ b/test/tsan/Linux/check_memcpy.cc
@@ -5,6 +5,8 @@
 // RUN: %clangxx_tsan -O1 %s -o %t
 // RUN: llvm-objdump -d %t | FileCheck %s
 
+// REQUIRES: compiler-rt-optimized
+
 int main() {
   return 0;
 }
diff --git a/test/tsan/Linux/pie_no_aslr.cc b/test/tsan/Linux/pie_no_aslr.cc
new file mode 100644
index 0000000..b99342d
--- /dev/null
+++ b/test/tsan/Linux/pie_no_aslr.cc
@@ -0,0 +1,6 @@
+// RUN: %clang_tsan %s -pie -fPIE -o %t && %run setarch x86_64 -R %t
+// REQUIRES: x86_64-target-arch
+
+int main() {
+  return 0;
+}
diff --git a/test/tsan/Linux/user_malloc.cc b/test/tsan/Linux/user_malloc.cc
index 9c3ce68..6d51a9d 100644
--- a/test/tsan/Linux/user_malloc.cc
+++ b/test/tsan/Linux/user_malloc.cc
@@ -1,4 +1,5 @@
 // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
+// UNSUPPORTED: powerpc64le
 #include <stdio.h>
 
 // Defined by tsan.
diff --git a/test/tsan/allocator_returns_null.cc b/test/tsan/allocator_returns_null.cc
index 6693007..852dda0 100644
--- a/test/tsan/allocator_returns_null.cc
+++ b/test/tsan/allocator_returns_null.cc
@@ -1,56 +1,90 @@
-// Test the behavior of malloc/calloc/realloc when the allocation size is huge.
+// Test the behavior of malloc/calloc/realloc/new when the allocation size is
+// more than TSan allocator's max allowed one.
 // By default (allocator_may_return_null=0) the process should crash.
-// With allocator_may_return_null=1 the allocator should return 0.
+// With allocator_may_return_null=1 the allocator should return 0, except the
+// operator new(), which should crash anyway (operator new(std::nothrow) should
+// return nullptr, indeed).
 //
 // RUN: %clangxx_tsan -O0 %s -o %t
 // RUN: not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
-// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mCRASH
-// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 | FileCheck %s --check-prefix=CHECK-cCRASH
-// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 | FileCheck %s --check-prefix=CHECK-coCRASH
-// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t realloc 2>&1 | FileCheck %s --check-prefix=CHECK-rCRASH
-// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 | FileCheck %s --check-prefix=CHECK-mrCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1     %run %t malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mNULL
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1     %run %t calloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-cNULL
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1     %run %t calloc-overflow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-coNULL
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1     %run %t realloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-rNULL
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1     %run %t realloc-after-malloc 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-mrNULL
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1 not %run %t new 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=0 not %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnCRASH
+// RUN: %env_tsan_opts=allocator_may_return_null=1     %run %t new-nothrow 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-nnNULL
 
-#include <limits.h>
-#include <stdlib.h>
+#include <assert.h>
 #include <string.h>
 #include <stdio.h>
-#include <assert.h>
+#include <stdlib.h>
 #include <limits>
-int main(int argc, char **argv) {
-  volatile size_t size = std::numeric_limits<size_t>::max() - 10000;
-  assert(argc == 2);
-  char *x = 0;
-  if (!strcmp(argv[1], "malloc")) {
-    fprintf(stderr, "malloc:\n");
-    x = (char*)malloc(size);
-  }
-  if (!strcmp(argv[1], "calloc")) {
-    fprintf(stderr, "calloc:\n");
-    x = (char*)calloc(size / 4, 4);
-  }
+#include <new>
 
-  if (!strcmp(argv[1], "calloc-overflow")) {
-    fprintf(stderr, "calloc-overflow:\n");
+int main(int argc, char **argv) {
+  // Disable stderr buffering. Needed on Windows.
+  setvbuf(stderr, NULL, _IONBF, 0);
+
+  assert(argc == 2);
+  const char *action = argv[1];
+  fprintf(stderr, "%s:\n", action);
+
+  static const size_t kMaxAllowedMallocSizePlusOne = (1ULL << 40) + 1;
+
+  void *x = 0;
+  if (!strcmp(action, "malloc")) {
+    x = malloc(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "calloc")) {
+    x = calloc((kMaxAllowedMallocSizePlusOne / 4) + 1, 4);
+  } else if (!strcmp(action, "calloc-overflow")) {
     volatile size_t kMaxSizeT = std::numeric_limits<size_t>::max();
     size_t kArraySize = 4096;
     volatile size_t kArraySize2 = kMaxSizeT / kArraySize + 10;
-    x = (char*)calloc(kArraySize, kArraySize2);
-  }
-
-  if (!strcmp(argv[1], "realloc")) {
-    fprintf(stderr, "realloc:\n");
-    x = (char*)realloc(0, size);
-  }
-  if (!strcmp(argv[1], "realloc-after-malloc")) {
-    fprintf(stderr, "realloc-after-malloc:\n");
+    x = calloc(kArraySize, kArraySize2);
+  } else if (!strcmp(action, "realloc")) {
+    x = realloc(0, kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "realloc-after-malloc")) {
     char *t = (char*)malloc(100);
     *t = 42;
-    x = (char*)realloc(t, size);
+    x = realloc(t, kMaxAllowedMallocSizePlusOne);
     assert(*t == 42);
+  } else if (!strcmp(action, "new")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne);
+  } else if (!strcmp(action, "new-nothrow")) {
+    x = operator new(kMaxAllowedMallocSizePlusOne, std::nothrow);
+  } else {
+    assert(0);
   }
-  fprintf(stderr, "x: %p\n", x);
+
+  // The NULL pointer is printed differently on different systems, while (long)0
+  // is always the same.
+  fprintf(stderr, "x: %lx\n", (long)x);
+  free(x);
   return x != 0;
 }
+
 // CHECK-mCRASH: malloc:
 // CHECK-mCRASH: ThreadSanitizer's allocator is terminating the process
 // CHECK-cCRASH: calloc:
@@ -61,4 +95,20 @@
 // CHECK-rCRASH: ThreadSanitizer's allocator is terminating the process
 // CHECK-mrCRASH: realloc-after-malloc:
 // CHECK-mrCRASH: ThreadSanitizer's allocator is terminating the process
+// CHECK-nCRASH: new:
+// CHECK-nCRASH: ThreadSanitizer's allocator is terminating the process
+// CHECK-nnCRASH: new-nothrow:
+// CHECK-nnCRASH: ThreadSanitizer's allocator is terminating the process
 
+// CHECK-mNULL: malloc:
+// CHECK-mNULL: x: 0
+// CHECK-cNULL: calloc:
+// CHECK-cNULL: x: 0
+// CHECK-coNULL: calloc-overflow:
+// CHECK-coNULL: x: 0
+// CHECK-rNULL: realloc:
+// CHECK-rNULL: x: 0
+// CHECK-mrNULL: realloc-after-malloc:
+// CHECK-mrNULL: x: 0
+// CHECK-nnNULL: new-nothrow:
+// CHECK-nnNULL: x: 0
diff --git a/test/tsan/atomic_hle.cc b/test/tsan/atomic_hle.cc
new file mode 100644
index 0000000..345e363
--- /dev/null
+++ b/test/tsan/atomic_hle.cc
@@ -0,0 +1,25 @@
+// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
+#include "test.h"
+#include <sanitizer/tsan_interface_atomic.h>
+
+#ifndef __ATOMIC_HLE_ACQUIRE
+#define __ATOMIC_HLE_ACQUIRE (1 << 16)
+#endif
+#ifndef __ATOMIC_HLE_RELEASE
+#define __ATOMIC_HLE_RELEASE (1 << 17)
+#endif
+
+int main() {
+  volatile int x = 0;
+  //__atomic_fetch_add(&x, 1, __ATOMIC_ACQUIRE | __ATOMIC_HLE_ACQUIRE);
+  //__atomic_store_n(&x, 0, __ATOMIC_RELEASE | __ATOMIC_HLE_RELEASE);
+  __tsan_atomic32_fetch_add(&x, 1,
+      (__tsan_memory_order)(__ATOMIC_ACQUIRE | __ATOMIC_HLE_ACQUIRE));
+  __tsan_atomic32_store(&x, 0,
+      (__tsan_memory_order)(__ATOMIC_RELEASE | __ATOMIC_HLE_RELEASE));
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK: DONE
+
diff --git a/test/tsan/custom_mutex.h b/test/tsan/custom_mutex.h
new file mode 100644
index 0000000..e3ac7a9
--- /dev/null
+++ b/test/tsan/custom_mutex.h
@@ -0,0 +1,91 @@
+#include "test.h"
+#include <atomic>
+#include <vector>
+#include <sanitizer/tsan_interface.h>
+
+// A very primitive mutex annotated with tsan annotations.
+class Mutex {
+ public:
+  Mutex(bool prof, unsigned flags)
+      : prof_(prof)
+      , locked_(false)
+      , seq_(0) {
+    __tsan_mutex_create(this, flags);
+  }
+
+  ~Mutex() {
+    __tsan_mutex_destroy(this, 0);
+  }
+
+  void Lock() {
+    __tsan_mutex_pre_lock(this, 0);
+    LockImpl();
+    __tsan_mutex_post_lock(this, 0, 0);
+  }
+
+  bool TryLock() {
+    __tsan_mutex_pre_lock(this, __tsan_mutex_try_lock);
+    bool ok = TryLockImpl();
+    __tsan_mutex_post_lock(this, __tsan_mutex_try_lock |
+        (ok ? 0 : __tsan_mutex_try_lock_failed), 0);
+    return ok;
+  }
+
+  void Unlock() {
+    __tsan_mutex_pre_unlock(this, 0);
+    UnlockImpl();
+    __tsan_mutex_post_unlock(this, 0);
+  }
+
+  void Wait() {
+    for (int seq = seq_; seq == seq_;) {
+      Unlock();
+      usleep(100);
+      Lock();
+    }
+  }
+
+  void Broadcast() {
+    __tsan_mutex_pre_signal(this, 0);
+    LockImpl(false);
+    seq_++;
+    UnlockImpl();
+    __tsan_mutex_post_signal(this, 0);
+  }
+
+ private:
+  const bool prof_;
+  std::atomic<bool> locked_;
+  int seq_;
+
+  // This models mutex profiling subsystem.
+  static Mutex prof_mu_;
+  static int prof_data_;
+
+  void LockImpl(bool prof = true) {
+    while (!TryLockImpl())
+      usleep(100);
+    if (prof && prof_)
+      Prof();
+  }
+
+  bool TryLockImpl() {
+    return !locked_.exchange(true);
+  }
+
+  void UnlockImpl() {
+    locked_.store(false);
+  }
+
+  void Prof() {
+      // This happens inside of mutex lock annotations.
+      __tsan_mutex_pre_divert(this, 0);
+      prof_mu_.Lock();
+      prof_data_++;
+      prof_mu_.Unlock();
+      __tsan_mutex_post_divert(this, 0);
+  }
+};
+
+Mutex Mutex::prof_mu_(false, __tsan_mutex_linker_init);
+int Mutex::prof_data_;
diff --git a/test/tsan/custom_mutex0.cc b/test/tsan/custom_mutex0.cc
new file mode 100644
index 0000000..8302fd8
--- /dev/null
+++ b/test/tsan/custom_mutex0.cc
@@ -0,0 +1,31 @@
+// RUN: %clangxx_tsan -O1 --std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s
+#include "custom_mutex.h"
+
+// Test that custom annoations provide normal mutex synchronization
+// (no race reports for properly protected critical sections).
+
+Mutex mu(true, 0);
+long data;
+
+void *thr(void *arg) {
+  barrier_wait(&barrier);
+  mu.Lock();
+  data++;
+  mu.Unlock();
+  return 0;
+}
+
+int main() {
+  barrier_init(&barrier, 2);
+  pthread_t th;
+  pthread_create(&th, 0, thr, 0);
+  barrier_wait(&barrier);
+  mu.Lock();
+  data++;
+  mu.Unlock();
+  pthread_join(th, 0);
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK: DONE
diff --git a/test/tsan/custom_mutex1.cc b/test/tsan/custom_mutex1.cc
new file mode 100644
index 0000000..1c879f5
--- /dev/null
+++ b/test/tsan/custom_mutex1.cc
@@ -0,0 +1,39 @@
+// RUN: %clangxx_tsan -O1 --std=c++11 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
+#include "custom_mutex.h"
+
+// Test that failed TryLock does not induce parasitic synchronization.
+
+Mutex mu(true, 0);
+long data;
+
+void *thr(void *arg) {
+  mu.Lock();
+  data++;
+  mu.Unlock();
+  mu.Lock();
+  barrier_wait(&barrier);
+  barrier_wait(&barrier);
+  mu.Unlock();
+  return 0;
+}
+
+int main() {
+  barrier_init(&barrier, 2);
+  pthread_t th;
+  pthread_create(&th, 0, thr, 0);
+  barrier_wait(&barrier);
+  if (mu.TryLock()) {
+    fprintf(stderr, "TryLock succeeded, should not\n");
+    exit(0);
+  }
+  data++;
+  barrier_wait(&barrier);
+  pthread_join(th, 0);
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK: ThreadSanitizer: data race
+// CHECK-NEXT:   Write of size 8 at {{.*}} by main thread:
+// CHECK-NEXT:     #0 main {{.*}}custom_mutex1.cc:29
+// CHECK: DONE
diff --git a/test/tsan/custom_mutex2.cc b/test/tsan/custom_mutex2.cc
new file mode 100644
index 0000000..d4aca7e
--- /dev/null
+++ b/test/tsan/custom_mutex2.cc
@@ -0,0 +1,34 @@
+// RUN: %clangxx_tsan -O1 --std=c++11 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
+#include "custom_mutex.h"
+
+// Test that Broadcast does not induce parasitic synchronization.
+
+Mutex mu(true, 0);
+long data;
+
+void *thr(void *arg) {
+  barrier_wait(&barrier);
+  mu.Lock();
+  data++;
+  mu.Unlock();
+  data++;
+  mu.Broadcast();
+  return 0;
+}
+
+int main() {
+  barrier_init(&barrier, 2);
+  pthread_t th;
+  pthread_create(&th, 0, thr, 0);
+  mu.Lock();
+  barrier_wait(&barrier);
+  while (data == 0)
+    mu.Wait();
+  mu.Unlock();
+  pthread_join(th, 0);
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK: ThreadSanitizer: data race
+// CHECK: DONE
diff --git a/test/tsan/custom_mutex3.cc b/test/tsan/custom_mutex3.cc
new file mode 100644
index 0000000..6e99926
--- /dev/null
+++ b/test/tsan/custom_mutex3.cc
@@ -0,0 +1,46 @@
+// RUN: %clangxx_tsan -O1 --std=c++11 %s -o %t
+// RUN: %env_tsan_opts=report_destroy_locked=0 %run %t 2>&1 | FileCheck %s
+#include "custom_mutex.h"
+
+// Regression test for a bug.
+// Thr1 destroys a locked mutex, previously such mutex was not removed from
+// sync map and as the result subsequent uses of a mutex located at the same
+// address caused false race reports.
+
+Mutex mu(false, __tsan_mutex_write_reentrant);
+long data;
+
+void *thr1(void *arg) {
+  mu.Lock();
+  mu.~Mutex();
+  new(&mu) Mutex(true, __tsan_mutex_write_reentrant);
+  return 0;
+}
+
+void *thr2(void *arg) {
+  barrier_wait(&barrier);
+  mu.Lock();
+  data++;
+  mu.Unlock();
+  return 0;
+}
+
+int main() {
+  barrier_init(&barrier, 2);
+  pthread_t th;
+  pthread_create(&th, 0, thr1, 0);
+  pthread_join(th, 0);
+
+  barrier_init(&barrier, 2);
+  pthread_create(&th, 0, thr2, 0);
+  mu.Lock();
+  data++;
+  mu.Unlock();
+  barrier_wait(&barrier);
+  pthread_join(th, 0);
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK-NOT: WARNING: ThreadSanitizer: data race
+// CHECK: DONE
diff --git a/test/tsan/debug_alloc_stack.cc b/test/tsan/debug_alloc_stack.cc
index 303c103..ffe99e7 100644
--- a/test/tsan/debug_alloc_stack.cc
+++ b/test/tsan/debug_alloc_stack.cc
@@ -15,7 +15,7 @@
 #endif
 
 extern "C" int __tsan_get_alloc_stack(void *addr, void **trace, size_t size,
-                                      int *thread_id, void *os_id);
+                                      int *thread_id, uint64_t *os_id);
 
 char *mem;
 void alloc_func() { mem = (char *)malloc(10); }
@@ -49,7 +49,7 @@
   void *trace[100];
   size_t num_frames = 100;
   int thread_id;
-  void *thread_os_id;
+  uint64_t *thread_os_id;
   num_frames =
       __tsan_get_alloc_stack(mem, trace, num_frames, &thread_id, &thread_os_id);
 
@@ -58,7 +58,7 @@
   // CHECK: alloc stack retval ok
   fprintf(stderr, "thread id = %d\n", thread_id);
   // CHECK: thread id = 1
-  fprintf(stderr, "thread os id = 0x%llx\n", (uint64_t)thread_os_id);
+  fprintf(stderr, "thread os id = 0x%llx\n", thread_os_id);
   // CHECK: thread os id = [[THREAD_OS_ID]]
   fprintf(stderr, "%p\n", trace[0]);
   // CHECK: [[ALLOC_FRAME_0:0x[0-9a-f]+]]
diff --git a/test/tsan/debugging.cc b/test/tsan/debugging.cc
index 6533644..d9c7c65 100644
--- a/test/tsan/debugging.cc
+++ b/test/tsan/debugging.cc
@@ -2,6 +2,7 @@
 // RUN: %deflake %run %t 2>&1 | FileCheck %s
 
 #include <pthread.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -20,7 +21,7 @@
                           void **addr, int *size, int *write, int *atomic,
                           void **trace, unsigned long trace_size);
 int __tsan_get_report_thread(void *report, unsigned long idx, int *tid,
-                             unsigned long *os_id, int *running,
+                             uint64_t *os_id, int *running,
                              const char **name, int *parent_tid, void **trace,
                              unsigned long trace_size);
 }
@@ -90,7 +91,7 @@
   fprintf(stderr, "thread_count = %d\n", thread_count);
   // CHECK: thread_count = 2
 
-  unsigned long os_id;
+  uint64_t os_id;
   int running;
   const char *name;
   int parent_tid;
diff --git a/test/tsan/deep_stack1.cc b/test/tsan/deep_stack1.cc
index 39185ef..44dd0c4 100644
--- a/test/tsan/deep_stack1.cc
+++ b/test/tsan/deep_stack1.cc
@@ -24,6 +24,10 @@
   return 0;
 }
 
+static size_t RoundUp(size_t n, size_t to) {
+  return ((n + to - 1) / to) * to;
+}
+
 int main() {
   barrier_init(&barrier, 2);
   N = 50000;
@@ -31,7 +35,10 @@
   pthread_t t;
   pthread_attr_t a;
   pthread_attr_init(&a);
-  pthread_attr_setstacksize(&a, N * 256 + (1 << 20));
+  size_t stack_size = N * 256 + (1 << 20);
+  stack_size = RoundUp(stack_size, 0x10000);  // round the stack size to 64k
+  int ret = pthread_attr_setstacksize(&a, stack_size);
+  if (ret) abort();
   pthread_create(&t, &a, Thread, 0);
 #ifdef ORDER2
   barrier_wait(&barrier);
diff --git a/test/tsan/fd_socket_connect_norace.cc b/test/tsan/fd_socket_connect_norace.cc
index b9fb434..1237518 100644
--- a/test/tsan/fd_socket_connect_norace.cc
+++ b/test/tsan/fd_socket_connect_norace.cc
@@ -1,20 +1,24 @@
 // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
+#include <arpa/inet.h>
+#include <assert.h>
+#include <netinet/in.h>
 #include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
 #include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
+#include <sys/types.h>
+#include <unistd.h>
 
-struct sockaddr_in addr;
+struct sockaddr_in addr4;
+struct sockaddr_in6 addr6;
+struct sockaddr *addr;
+socklen_t addrlen;
 int X;
 
 void *ClientThread(void *x) {
-  int c = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+  int c = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
   X = 42;
-  if (connect(c, (struct sockaddr*)&addr, sizeof(addr))) {
+  if (connect(c, addr, addrlen)) {
     perror("connect");
     exit(1);
   }
@@ -23,13 +27,26 @@
 }
 
 int main() {
-  int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-  addr.sin_family = AF_INET;
-  inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
-  addr.sin_port = INADDR_ANY;
-  socklen_t len = sizeof(addr);
-  bind(s, (sockaddr*)&addr, len);
-  getsockname(s, (sockaddr*)&addr, &len);
+  addr4.sin_family = AF_INET;
+  addr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+  addr4.sin_port = INADDR_ANY;
+  addr = (struct sockaddr *)&addr4;
+  addrlen = sizeof(addr4);
+
+  int s = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
+  if (s <= 0) {
+    // Try to fall-back to IPv6
+    addr6.sin6_family = AF_INET6;
+    addr6.sin6_addr = in6addr_loopback;
+    addr6.sin6_port = INADDR_ANY;
+    addr = (struct sockaddr *)&addr6;
+    addrlen = sizeof(addr6);
+    s = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
+  }
+  assert(s > 0);
+
+  bind(s, addr, addrlen);
+  getsockname(s, addr, &addrlen);
   listen(s, 10);
   pthread_t t;
   pthread_create(&t, 0, ClientThread, 0);
diff --git a/test/tsan/fd_socket_norace.cc b/test/tsan/fd_socket_norace.cc
index 07b0cb3..a1761cb 100644
--- a/test/tsan/fd_socket_norace.cc
+++ b/test/tsan/fd_socket_norace.cc
@@ -1,20 +1,24 @@
 // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
+#include <arpa/inet.h>
+#include <assert.h>
+#include <netinet/in.h>
 #include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
 #include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
+#include <sys/types.h>
+#include <unistd.h>
 
-struct sockaddr_in addr;
+struct sockaddr_in addr4;
+struct sockaddr_in6 addr6;
+struct sockaddr *addr;
+socklen_t addrlen;
 int X;
 
 void *ClientThread(void *x) {
   X = 42;
-  int c = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-  if (connect(c, (struct sockaddr*)&addr, sizeof(addr))) {
+  int c = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
+  if (connect(c, addr, addrlen)) {
     perror("connect");
     exit(1);
   }
@@ -27,13 +31,26 @@
 }
 
 int main() {
-  int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-  addr.sin_family = AF_INET;
-  inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
-  addr.sin_port = INADDR_ANY;
-  socklen_t len = sizeof(addr);
-  bind(s, (sockaddr*)&addr, len);
-  getsockname(s, (sockaddr*)&addr, &len);
+  addr4.sin_family = AF_INET;
+  addr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+  addr4.sin_port = INADDR_ANY;
+  addr = (struct sockaddr *)&addr4;
+  addrlen = sizeof(addr4);
+
+  int s = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
+  if (s <= 0) {
+    // Try to fall-back to IPv6
+    addr6.sin6_family = AF_INET6;
+    addr6.sin6_addr = in6addr_loopback;
+    addr6.sin6_port = INADDR_ANY;
+    addr = (struct sockaddr *)&addr6;
+    addrlen = sizeof(addr6);
+    s = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
+  }
+  assert(s > 0);
+
+  bind(s, addr, addrlen);
+  getsockname(s, addr, &addrlen);
   listen(s, 10);
   pthread_t t;
   pthread_create(&t, 0, ClientThread, 0);
diff --git a/test/tsan/free_race.c b/test/tsan/free_race.c
index b35ad24..d508552 100644
--- a/test/tsan/free_race.c
+++ b/test/tsan/free_race.c
@@ -37,12 +37,11 @@
 
 // CHECK-NOZUPP: WARNING: ThreadSanitizer: heap-use-after-free
 // CHECK-NOZUPP:   Write of size 4 at {{.*}} by main thread{{.*}}:
-// CHECK-NOZUPP:   * #0 Thread2
+// CHECK-NOZUPP:     #0 Thread2
 // CHECK-NOZUPP:     #1 main
 // CHECK-NOZUPP:   Previous write of size 8 at {{.*}} by thread T1{{.*}}:
 // CHECK-NOZUPP:     #0 free
-// CHECK-NOZUPP:   * #{{(1|2)}} Thread1
-// CHECK-NOZUPP:   Issue is caused by frames marked with "*".
+// CHECK-NOZUPP:     #{{(1|2)}} Thread1
 // CHECK-NOZUPP: SUMMARY: ThreadSanitizer: heap-use-after-free{{.*}}Thread2
 // CHECK-SUPP:   ThreadSanitizer: Matched 1 suppressions
 // CHECK-SUPP:    1 race:^Thread2$
diff --git a/test/tsan/ignore_lib0.cc b/test/tsan/ignore_lib0.cc
index d6ae72f..8463201 100644
--- a/test/tsan/ignore_lib0.cc
+++ b/test/tsan/ignore_lib0.cc
@@ -11,6 +11,8 @@
 // Some aarch64 kernels do not support non executable write pages
 // REQUIRES: stable-runtime
 
+// UNSUPPORTED: ios
+
 #ifndef LIB
 
 extern "C" void libfunc();
diff --git a/test/tsan/ignore_lib1.cc b/test/tsan/ignore_lib1.cc
index e6a13a3..5949d81 100644
--- a/test/tsan/ignore_lib1.cc
+++ b/test/tsan/ignore_lib1.cc
@@ -9,6 +9,9 @@
 // in called_from_lib suppression are ignored.
 
 // REQUIRES: stable-runtime
+// UNSUPPORTED: powerpc64le
+// FIXME: This test regularly fails on powerpc64 LE possibly starting with
+// r279664.  Re-enable the test once the problem(s) have been fixed.
 
 #ifndef LIB
 
diff --git a/test/tsan/ignore_lib5.cc b/test/tsan/ignore_lib5.cc
index d7cd285..54630d5 100644
--- a/test/tsan/ignore_lib5.cc
+++ b/test/tsan/ignore_lib5.cc
@@ -6,6 +6,9 @@
 // RUN: %env_tsan_opts=suppressions='%s.supp' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-WITHSUPP
 
 // REQUIRES: stable-runtime
+// UNSUPPORTED: powerpc64le
+// FIXME: This test occasionally fails on powerpc64 LE possibly starting with
+// r279664.  Re-enable the test once the problem(s) have been fixed.
 
 // Previously the test episodically failed with:
 //   ThreadSanitizer: called_from_lib suppression '/libignore_lib1.so$' is
diff --git a/test/tsan/java_find.cc b/test/tsan/java_find.cc
new file mode 100644
index 0000000..078aac5
--- /dev/null
+++ b/test/tsan/java_find.cc
@@ -0,0 +1,69 @@
+// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
+#include "java.h"
+
+int const kHeapSize = 1024 * 1024;
+
+static void verify_find(jptr from, jptr to, jptr expected_addr,
+                        jptr expected_size) {
+  jptr addr = from;
+  jptr size = __tsan_java_find(&addr, to);
+  if (expected_size) {
+    if (!size) {
+      fprintf(stderr, "FAILED: range: [%p..%p): found nothing\n", (void *)from,
+              (void *)to);
+      return;
+    } else if (expected_size != size) {
+      fprintf(stderr, "FAILED: range: [%p..%p): wrong size, %lu instead of %lu\n",
+              (void *)from, (void *)to, size, expected_size);
+      return;
+    }
+  } else if (size) {
+    fprintf(stderr,
+            "FAILED: range [%p..%p): did not expect to find anything here\n",
+            (void *)from, (void *)to);
+    return;
+  } else {
+    return;
+  }
+  if (expected_addr != addr) {
+    fprintf(
+        stderr,
+        "FAILED: range [%p..%p): expected to find object at %p, found at %p\n",
+        (void *)from, (void *)to, (void *)expected_addr, (void *)addr);
+  }
+}
+
+int main() {
+  const jptr jheap = (jptr)malloc(kHeapSize + 8) + 8;
+  const jptr jheap_end = jheap + kHeapSize;
+  __tsan_java_init(jheap, kHeapSize);
+  const jptr addr1 = jheap;
+  const int size1 = 16;
+  __tsan_java_alloc(jheap, size1);
+
+  const jptr addr2 = addr1 + size1;
+  const int size2 = 32;
+  __tsan_java_alloc(jheap + size1, size2);
+
+  const jptr addr3 = addr2 + size2;
+  const int size3 = 1024;
+  __tsan_java_alloc(jheap + size1 + size2, size3);
+
+  const jptr addr4 = addr3 + size3;
+
+  verify_find(jheap, jheap_end, addr1, size1);
+  verify_find(jheap + 8, jheap_end, addr2, size2);
+  verify_find(addr2 + 8, jheap_end, addr3, size3);
+  verify_find(addr3 + 8, jheap_end, 0, 0);
+
+  __tsan_java_move(addr2, addr4, size2);
+  verify_find(jheap + 8, jheap_end, addr3, size3);
+  verify_find(addr3 + 8, jheap_end, addr4, size2);
+  verify_find(addr4 + 8, jheap_end, 0, 0);
+
+  fprintf(stderr, "DONE\n");
+  return 0;
+}
+
+// CHECK-NOT: FAILED
+// CHECK: DONE
diff --git a/test/tsan/lit.cfg b/test/tsan/lit.cfg
index 3c98d1f..0ab62db 100644
--- a/test/tsan/lit.cfg
+++ b/test/tsan/lit.cfg
@@ -66,7 +66,7 @@
                           "-Wl,-rpath=%s" % libcxx_libdir]
 
 def build_invocation(compile_flags):
-  return " " + " ".join([config.clang] + compile_flags) + " "
+  return " " + " ".join([config.compile_wrapper, config.clang] + compile_flags) + " "
 
 config.substitutions.append( ("%clang_tsan ", build_invocation(clang_tsan_cflags)) )
 config.substitutions.append( ("%clangxx_tsan ", build_invocation(clang_tsan_cxxflags)) )
diff --git a/test/tsan/lit.site.cfg.in b/test/tsan/lit.site.cfg.in
index a87e8d2..a215e66 100644
--- a/test/tsan/lit.site.cfg.in
+++ b/test/tsan/lit.site.cfg.in
@@ -1,7 +1,10 @@
 @LIT_SITE_CFG_IN_HEADER@
 
 config.name_suffix = "@TSAN_TEST_CONFIG_SUFFIX@"
+config.tsan_lit_source_dir = "@TSAN_LIT_SOURCE_DIR@"
 config.has_libcxx = @TSAN_HAS_LIBCXX@
+config.ios = @TSAN_TEST_IOS_PYBOOL@
+config.iossim = @TSAN_TEST_IOSSIM_PYBOOL@
 config.target_cflags = "@TSAN_TEST_TARGET_CFLAGS@"
 config.target_arch = "@TSAN_TEST_TARGET_ARCH@"
 
diff --git a/test/tsan/memcmp_race.cc b/test/tsan/memcmp_race.cc
index 8098ed5..b76f427 100644
--- a/test/tsan/memcmp_race.cc
+++ b/test/tsan/memcmp_race.cc
@@ -36,8 +36,7 @@
 // CHECK: WARNING: ThreadSanitizer: data race
 // CHECK:   Write of size 1 at [[ADDR]] by thread T2:
 // CHECK:     #0 {{(memcpy|memmove)}}
-// CHECK:   * #1 Thread2
+// CHECK:     #1 Thread2
 // CHECK:   Previous read of size 1 at [[ADDR]] by thread T1:
 // CHECK:     #0 memcmp
-// CHECK:   * #1 Thread1
-// CHECK:   Issue is caused by frames marked with "*".
+// CHECK:     #1 Thread1
diff --git a/test/tsan/memcpy_race.cc b/test/tsan/memcpy_race.cc
index 9b0da92..4a098c0 100644
--- a/test/tsan/memcpy_race.cc
+++ b/test/tsan/memcpy_race.cc
@@ -35,8 +35,7 @@
 // CHECK: WARNING: ThreadSanitizer: data race
 // CHECK:   Write of size 1 at [[ADDR]] by thread T2:
 // CHECK:     #0 {{(memcpy|memmove)}}
-// CHECK:   * #1 Thread2
+// CHECK:     #1 Thread2
 // CHECK:   Previous write of size 1 at [[ADDR]] by thread T1:
 // CHECK:     #0 {{(memcpy|memmove)}}
-// CHECK:   * #1 Thread1
-// CHECK:   Issue is caused by frames marked with "*".
+// CHECK:     #1 Thread1
diff --git a/test/tsan/mutex_destroy_locked.cc b/test/tsan/mutex_destroy_locked.cc
index f032787..b81905e 100644
--- a/test/tsan/mutex_destroy_locked.cc
+++ b/test/tsan/mutex_destroy_locked.cc
@@ -12,11 +12,10 @@
 
 // CHECK: WARNING: ThreadSanitizer: destroy of a locked mutex
 // CHECK:     #0 pthread_mutex_destroy
-// CHECK:   * #1 main
+// CHECK:     #1 main
 // CHECK:   and:
 // CHECK:     #0 pthread_mutex_lock
-// CHECK:   * #1 main
-// CHECK:   Issue is caused by frames marked with "*".
+// CHECK:     #1 main
 // CHECK:   Mutex {{.*}} created at:
 // CHECK:     #0 pthread_mutex_init
 // CHECK:     #1 main
diff --git a/test/tsan/strerror_r.cc b/test/tsan/strerror_r.cc
new file mode 100644
index 0000000..06c92d3
--- /dev/null
+++ b/test/tsan/strerror_r.cc
@@ -0,0 +1,29 @@
+// RUN: %clangxx_tsan -O1 -DTEST_ERROR=ERANGE %s -o %t && %run %t 2>&1 | FileCheck --check-prefixes=CHECK,CHECK-SYS %s
+// RUN: %clangxx_tsan -O1 -DTEST_ERROR=-1 %s -o %t && not %run %t 2>&1 | FileCheck --check-prefixes=CHECK,CHECK-USER %s
+// UNSUPPORTED: darwin
+
+#include <assert.h>
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <string.h>
+
+char buffer[1000];
+
+void *Thread(void *p) {
+  return strerror_r(TEST_ERROR, buffer, sizeof(buffer));
+}
+
+int main() {
+  pthread_t th[2];
+  pthread_create(&th[0], 0, Thread, 0);
+  pthread_create(&th[1], 0, Thread, 0);
+  pthread_join(th[0], 0);
+  pthread_join(th[1], 0);
+  fprintf(stderr, "DONE\n");
+}
+
+// CHECK-USER: WARNING: ThreadSanitizer: data race
+// CHECK-SYS-NOT: WARNING: ThreadSanitizer: data race
+
+// CHECK: DONE
diff --git a/test/tsan/test.h b/test/tsan/test.h
index 6b981c0..bc4f7aa 100644
--- a/test/tsan/test.h
+++ b/test/tsan/test.h
@@ -8,6 +8,8 @@
 #include <stdarg.h>
 #include "sanitizer_common/print_address.h"
 
+#include <sanitizer/tsan_interface.h>
+
 #ifdef __APPLE__
 #include <mach/mach_time.h>
 #endif
diff --git a/test/tsan/unaligned_race.cc b/test/tsan/unaligned_race.cc
index 030642a..5850b21 100644
--- a/test/tsan/unaligned_race.cc
+++ b/test/tsan/unaligned_race.cc
@@ -6,31 +6,22 @@
 
 volatile uint64_t objs[8*2*(2 + 4 + 8)][2];
 
-extern "C" {
-uint16_t __sanitizer_unaligned_load16(volatile void *addr);
-uint32_t __sanitizer_unaligned_load32(volatile void *addr);
-uint64_t __sanitizer_unaligned_load64(volatile void *addr);
-void __sanitizer_unaligned_store16(volatile void *addr, uint16_t v);
-void __sanitizer_unaligned_store32(volatile void *addr, uint32_t v);
-void __sanitizer_unaligned_store64(volatile void *addr, uint64_t v);
-}
-
 // All this mess is to generate unique stack for each race,
 // otherwise tsan will suppress similar stacks.
 
-static NOINLINE void access(volatile char *p, int sz, int rw) {
+static NOINLINE void access(volatile void *p, int sz, int rw) {
   if (rw) {
     switch (sz) {
-    case 0: __sanitizer_unaligned_store16(p, 0); break;
-    case 1: __sanitizer_unaligned_store32(p, 0); break;
-    case 2: __sanitizer_unaligned_store64(p, 0); break;
+    case 0: __sanitizer_unaligned_store16((void *)p, 0); break;
+    case 1: __sanitizer_unaligned_store32((void *)p, 0); break;
+    case 2: __sanitizer_unaligned_store64((void *)p, 0); break;
     default: exit(1);
     }
   } else {
     switch (sz) {
-    case 0: __sanitizer_unaligned_load16(p); break;
-    case 1: __sanitizer_unaligned_load32(p); break;
-    case 2: __sanitizer_unaligned_load64(p); break;
+    case 0: __sanitizer_unaligned_load16((void *)p); break;
+    case 1: __sanitizer_unaligned_load32((void *)p); break;
+    case 2: __sanitizer_unaligned_load64((void *)p); break;
     default: exit(1);
     }
   }
diff --git a/test/ubsan/TestCases/Integer/negate-overflow.cpp b/test/ubsan/TestCases/Integer/negate-overflow.cpp
index 628291e..72438d3 100644
--- a/test/ubsan/TestCases/Integer/negate-overflow.cpp
+++ b/test/ubsan/TestCases/Integer/negate-overflow.cpp
@@ -6,7 +6,9 @@
   // CHECKU: negate-overflow.cpp:[[@LINE+2]]:3: runtime error: negation of 2147483648 cannot be represented in type 'unsigned int'
   // CHECKU-NOT: cast to an unsigned
   -unsigned(-0x7fffffff - 1); // ok
-  // CHECKS: negate-overflow.cpp:[[@LINE+2]]:10: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
+  // CHECKS: negate-overflow.cpp:[[@LINE+2]]:3: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
   // CHECKU-NOT: runtime error
-  return -(-0x7fffffff - 1);
+  -(-0x7fffffff - 1);
+
+  return 0;
 }
diff --git a/test/ubsan/TestCases/Misc/Linux/print_stack_trace.cc b/test/ubsan/TestCases/Misc/Linux/print_stack_trace.cc
new file mode 100644
index 0000000..341fd7a
--- /dev/null
+++ b/test/ubsan/TestCases/Misc/Linux/print_stack_trace.cc
@@ -0,0 +1,23 @@
+// RUN: %clangxx -fsanitize=undefined -O0 %s -o %t && UBSAN_OPTIONS=stack_trace_format=DEFAULT:fast_unwind_on_fatal=1 %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx -fsanitize=undefined -O0 %s -o %t && UBSAN_OPTIONS=stack_trace_format=DEFAULT:fast_unwind_on_fatal=0 %run %t 2>&1 | FileCheck %s
+
+// This test is temporarily disabled due to broken unwinding on ARM.
+// UNSUPPORTED: -linux-
+
+// The test doesn't pass on Darwin in UBSan-TSan configuration, because TSan is
+// using the slow unwinder which is not supported on Darwin. The test should
+// be universal after landing of https://reviews.llvm.org/D32806.
+
+#include <sanitizer/common_interface_defs.h>
+
+static inline void FooBarBaz() {
+  __sanitizer_print_stack_trace();
+}
+
+int main() {
+  FooBarBaz();
+  return 0;
+}
+
+// CHECK: {{.*}} in FooBarBaz{{.*}}print_stack_trace.cc{{.*}}
+// CHECK: {{.*}} in main{{.*}}print_stack_trace.cc{{.*}}
diff --git a/test/ubsan/TestCases/Misc/builtins.cpp b/test/ubsan/TestCases/Misc/builtins.cpp
new file mode 100644
index 0000000..18c68b5
--- /dev/null
+++ b/test/ubsan/TestCases/Misc/builtins.cpp
@@ -0,0 +1,35 @@
+// REQUIRES: arch=x86_64
+//
+// RUN: %clangxx -fsanitize=builtin -w %s -O3 -o %t
+// RUN: %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER
+// RUN: %clangxx -fsanitize=builtin -fno-sanitize-recover=builtin -w %s -O3 -o %t.abort
+// RUN: not %run %t.abort 2>&1 | FileCheck %s --check-prefix=ABORT
+
+void check_ctz(int n) {
+  // ABORT: builtins.cpp:[[@LINE+2]]:17: runtime error: passing zero to ctz(), which is not a valid argument
+  // RECOVER: builtins.cpp:[[@LINE+1]]:17: runtime error: passing zero to ctz(), which is not a valid argument
+  __builtin_ctz(n);
+
+  // RECOVER: builtins.cpp:[[@LINE+1]]:18: runtime error: passing zero to ctz(), which is not a valid argument
+  __builtin_ctzl(n);
+
+  // RECOVER: builtins.cpp:[[@LINE+1]]:19: runtime error: passing zero to ctz(), which is not a valid argument
+  __builtin_ctzll(n);
+}
+
+void check_clz(int n) {
+  // RECOVER: builtins.cpp:[[@LINE+1]]:17: runtime error: passing zero to clz(), which is not a valid argument
+  __builtin_clz(n);
+
+  // RECOVER: builtins.cpp:[[@LINE+1]]:18: runtime error: passing zero to clz(), which is not a valid argument
+  __builtin_clzl(n);
+
+  // RECOVER: builtins.cpp:[[@LINE+1]]:19: runtime error: passing zero to clz(), which is not a valid argument
+  __builtin_clzll(n);
+}
+
+int main() {
+  check_ctz(0);
+  check_clz(0);
+  return 0;
+}
diff --git a/test/ubsan/TestCases/Misc/missing_return.cpp b/test/ubsan/TestCases/Misc/missing_return.cpp
index 7b56b97..5c5b286 100644
--- a/test/ubsan/TestCases/Misc/missing_return.cpp
+++ b/test/ubsan/TestCases/Misc/missing_return.cpp
@@ -1,4 +1,4 @@
-// RUN: %clangxx -fsanitize=return -g %s -O3 -o %t
+// RUN: %clangxx -fsanitize=return %gmlt %s -O3 -o %t
 // RUN: not %run %t 2>&1 | FileCheck %s
 // RUN: %env_ubsan_opts=print_stacktrace=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-STACKTRACE
 
diff --git a/test/ubsan/TestCases/Misc/nullability.c b/test/ubsan/TestCases/Misc/nullability.c
index b228b24..a6ddf0e 100644
--- a/test/ubsan/TestCases/Misc/nullability.c
+++ b/test/ubsan/TestCases/Misc/nullability.c
@@ -6,8 +6,6 @@
 // CHECK-NEXT: nullability.c:[[@LINE+1]]:6: note: _Nonnull return type annotation specified here
 int *_Nonnull nonnull_retval1(int *p) { return p; }
 
-// CHECK: nullability.c:1001:19: runtime error: null pointer passed as argument 1, which is declared to never be null
-// CHECK-NEXT: nullability.c:[[@LINE+3]]:36: note: _Nonnull type annotation specified here
 // CHECK: nullability.c:1001:22: runtime error: null pointer passed as argument 2, which is declared to never be null
 // CHECK-NEXT: nullability.c:[[@LINE+1]]:56: note: _Nonnull type annotation specified here
 int *_Nonnull nonnull_retval2(int *_Nonnull arg1, int *_Nonnull arg2,
diff --git a/test/ubsan/TestCases/Misc/vla.c b/test/ubsan/TestCases/Misc/vla.c
index 1072153..1939551 100644
--- a/test/ubsan/TestCases/Misc/vla.c
+++ b/test/ubsan/TestCases/Misc/vla.c
@@ -4,8 +4,8 @@
 // RUN: %run %t a b
 
 int main(int argc, char **argv) {
-  // CHECK-MINUS-ONE: vla.c:9:11: runtime error: variable length array bound evaluates to non-positive value -1
-  // CHECK-ZERO: vla.c:9:11: runtime error: variable length array bound evaluates to non-positive value 0
+  // CHECK-MINUS-ONE: vla.c:[[@LINE+2]]:11: runtime error: variable length array bound evaluates to non-positive value -1
+  // CHECK-ZERO: vla.c:[[@LINE+1]]:11: runtime error: variable length array bound evaluates to non-positive value 0
   int arr[argc - 2];
   return 0;
 }
diff --git a/test/ubsan/TestCases/TypeCheck/Linux/PR33221.cpp b/test/ubsan/TestCases/TypeCheck/Linux/PR33221.cpp
new file mode 100644
index 0000000..e026e8d
--- /dev/null
+++ b/test/ubsan/TestCases/TypeCheck/Linux/PR33221.cpp
@@ -0,0 +1,50 @@
+// RUN: %clangxx -std=c++11 -frtti -fsanitize=vptr -g %s -O3 -o %t
+// RUN: %run %t &> %t.log
+// RUN: cat %t.log | not count 0 && FileCheck --input-file %t.log %s || cat %t.log | count 0
+
+// REQUIRES: cxxabi
+
+#include <sys/mman.h>
+#include <unistd.h>
+
+class Base {
+public:
+  int i;
+  virtual void print() {}
+};
+
+class Derived : public Base {
+public:
+  void print() {}
+};
+
+
+int main() {
+  int page_size = getpagesize();
+
+  void *non_accessible = mmap(nullptr, page_size, PROT_NONE,
+                              MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  
+  if (non_accessible == MAP_FAILED)
+    return 0;
+
+  void *accessible = mmap((char*)non_accessible + page_size, page_size,
+                          PROT_READ | PROT_WRITE,
+                          MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (accessible == MAP_FAILED)
+    return 0;
+
+  char *c = new char[sizeof(Derived)];
+
+  // The goal is to trigger a condition when Vptr points to accessible memory,
+  // but VptrPrefix does not. That has been triggering SIGSEGV in UBSan code.
+  void **vtable_ptr = reinterpret_cast<void **>(c);
+  *vtable_ptr = (void*)accessible;
+
+  Derived *list = (Derived *)c;
+
+// CHECK: PR33221.cpp:[[@LINE+2]]:19: runtime error: member access within address {{.*}} which does not point to an object of type 'Base'
+// CHECK-NEXT: invalid vptr
+  int foo = list->i;
+  return 0;
+}
diff --git a/test/ubsan/TestCases/TypeCheck/Linux/lit.local.cfg b/test/ubsan/TestCases/TypeCheck/Linux/lit.local.cfg
new file mode 100644
index 0000000..57271b8
--- /dev/null
+++ b/test/ubsan/TestCases/TypeCheck/Linux/lit.local.cfg
@@ -0,0 +1,9 @@
+def getRoot(config):
+  if not config.parent:
+    return config
+  return getRoot(config.parent)
+
+root = getRoot(config)
+
+if root.host_os not in ['Linux']:
+  config.unsupported = True
diff --git a/test/ubsan/TestCases/TypeCheck/PR33221.cpp b/test/ubsan/TestCases/TypeCheck/PR33221.cpp
index 9821f22..71da06c 100644
--- a/test/ubsan/TestCases/TypeCheck/PR33221.cpp
+++ b/test/ubsan/TestCases/TypeCheck/PR33221.cpp
@@ -18,7 +18,7 @@
 
 int main() {
   char *c = new char[sizeof(Derived)];
-  memset((void *)c, 0, sizeof(Derived));
+  memset((void *)c, 0xFF, sizeof(Derived));
   Derived *list = (Derived *)c;
 
 // CHECK: PR33221.cpp:[[@LINE+2]]:19: runtime error: member access within address {{.*}} which does not point to an object of type 'Base'
diff --git a/test/ubsan/TestCases/TypeCheck/misaligned.cpp b/test/ubsan/TestCases/TypeCheck/misaligned.cpp
index b3ff358..4eaedf3 100644
--- a/test/ubsan/TestCases/TypeCheck/misaligned.cpp
+++ b/test/ubsan/TestCases/TypeCheck/misaligned.cpp
@@ -1,8 +1,4 @@
-// FIXME: This test currently fails on Windows because we use the MSVC linker,
-// which throws away DWARF debug info.
-// XFAIL: win32
-//
-// RUN: %clangxx -fsanitize=alignment -g %s -O3 -o %t
+// RUN: %clangxx %gmlt -fsanitize=alignment %s -O3 -o %t
 // RUN: %run %t l0 && %run %t s0 && %run %t r0 && %run %t m0 && %run %t f0 && %run %t n0 && %run %t u0
 // RUN: %run %t l1 2>&1 | FileCheck %s --check-prefix=CHECK-LOAD --strict-whitespace
 // RUN: %run %t s1 2>&1 | FileCheck %s --check-prefix=CHECK-STORE
diff --git a/test/ubsan/lit.common.cfg b/test/ubsan/lit.common.cfg
index cd6d209..b55fb5f 100644
--- a/test/ubsan/lit.common.cfg
+++ b/test/ubsan/lit.common.cfg
@@ -38,6 +38,9 @@
   lit_config.fatal("Unknown UBSan test mode: %r" % ubsan_lit_test_mode)
 
 # Platform-specific default for lit tests.
+if config.target_arch == 's390x':
+  # On SystemZ we need -mbackchain to make the fast unwinder work.
+  clang_ubsan_cflags.append("-mbackchain")
 if config.host_os == 'Darwin':
   # On Darwin, we default to `abort_on_error=1`, which would make tests run
   # much slower. Let's override this and run lit tests with 'abort_on_error=0'.
@@ -61,6 +64,7 @@
 # Define %clang and %clangxx substitutions to use in test RUN lines.
 config.substitutions.append( ("%clang ", build_invocation(clang_ubsan_cflags)) )
 config.substitutions.append( ("%clangxx ", build_invocation(clang_ubsan_cxxflags)) )
+config.substitutions.append( ("%gmlt ", " ".join(config.debug_info_flags) + " ") )
 
 # Default test suffixes.
 config.suffixes = ['.c', '.cc', '.cpp']
@@ -73,3 +77,5 @@
 # because the test hangs or fails on one configuration and not the other.
 if config.target_arch.startswith('arm') == False and config.target_arch != 'aarch64':
   config.available_features.add('stable-runtime')
+
+config.available_features.add('arch=' + config.target_arch)
diff --git a/test/xray/CMakeLists.txt b/test/xray/CMakeLists.txt
index 50f6926..b51b3cd 100644
--- a/test/xray/CMakeLists.txt
+++ b/test/xray/CMakeLists.txt
@@ -9,7 +9,6 @@
 if(NOT COMPILER_RT_STANDALONE_BUILD AND COMPILER_RT_BUILD_XRAY AND
    COMPILER_RT_HAS_XRAY)
   list(APPEND XRAY_TEST_DEPS xray)
-  list(APPEND XRAY_FDR_TEST_DEPS xray-fdr)
 endif()
 
 set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH})
@@ -41,8 +40,3 @@
   ${XRAY_TESTSUITES}
   DEPENDS ${XRAY_TEST_DEPS})
 set_target_properties(check-xray PROPERTIES FOLDER "Compiler-RT Misc")
-
-add_lit_testsuite(check-xray-fdr "Running the XRay flight data recorder tests"
-  ${XRAY_FDR_TESTSUITES}
-  DEPENDS ${XRAY_FDR_TEST_DEPS})
-set_target_properties(check-xray-fdr PROPERTIES FOLDER "Compiler-RT Misc")
diff --git a/test/xray/TestCases/Linux/always-never-instrument.cc b/test/xray/TestCases/Linux/always-never-instrument.cc
new file mode 100644
index 0000000..4e19685
--- /dev/null
+++ b/test/xray/TestCases/Linux/always-never-instrument.cc
@@ -0,0 +1,23 @@
+// Test that the always/never instrument lists apply.
+// RUN: echo "fun:main" > %tmp-always.txt
+// RUN: echo "fun:__xray*" > %tmp-never.txt
+// RUN: %clangxx_xray \
+// RUN:     -fxray-never-instrument=%tmp-never.txt \
+// RUN:     -fxray-always-instrument=%tmp-always.txt \
+// RUN:     %s -o %t
+// RUN: %llvm_xray extract -symbolize %t | \
+// RUN:    FileCheck %s --check-prefix NOINSTR
+// RUN: %llvm_xray extract -symbolize %t | \
+// RUN:    FileCheck %s --check-prefix ALWAYSINSTR
+// REQUIRES: x86_64-linux
+// REQUIRES: built-in-llvm-tree
+
+// NOINSTR-NOT: {{.*__xray_NeverInstrumented.*}}
+int __xray_NeverInstrumented() {
+  return 0;
+}
+
+// ALWAYSINSTR: {{.*function-name:.*main.*}}
+int main(int argc, char *argv[]) {
+  return __xray_NeverInstrumented();
+}
diff --git a/test/xray/TestCases/Linux/arg1-arg0-logging.cc b/test/xray/TestCases/Linux/arg1-arg0-logging.cc
new file mode 100644
index 0000000..e7730bf
--- /dev/null
+++ b/test/xray/TestCases/Linux/arg1-arg0-logging.cc
@@ -0,0 +1,39 @@
+// Allow having both the no-arg and arg1 logging implementation live together,
+// and be called in the correct cases.
+//
+// RUN: rm arg0-arg1-logging-* || true
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=true verbosity=1 xray_logfile_base=arg0-arg1-logging-" %run %t
+//
+// TODO: Support these in ARM and PPC
+// XFAIL: arm || aarch64 || mips
+// UNSUPPORTED: powerpc64le
+
+#include "xray/xray_interface.h"
+#include <cassert>
+#include <cstdio>
+
+using namespace std;
+
+bool arg0loggercalled = false;
+void arg0logger(int32_t, XRayEntryType) { arg0loggercalled = true; }
+
+[[clang::xray_always_instrument]] void arg0fn() { printf("hello, arg0!\n"); }
+
+bool arg1loggercalled = false;
+void arg1logger(int32_t, XRayEntryType, uint64_t) { arg1loggercalled = true; }
+
+[[ clang::xray_always_instrument, clang::xray_log_args(1) ]] void
+arg1fn(uint64_t arg1) {
+  printf("hello, arg1!\n");
+}
+
+int main(int argc, char *argv[]) {
+  __xray_set_handler(arg0logger);
+  __xray_set_handler_arg1(arg1logger);
+  arg0fn();
+  arg1fn(0xcafef00d);
+  __xray_remove_handler_arg1();
+  __xray_remove_handler();
+  assert(arg0loggercalled && arg1loggercalled);
+}
diff --git a/test/xray/TestCases/Linux/arg1-logger.cc b/test/xray/TestCases/Linux/arg1-logger.cc
new file mode 100644
index 0000000..955347b
--- /dev/null
+++ b/test/xray/TestCases/Linux/arg1-logger.cc
@@ -0,0 +1,43 @@
+// Check that we can get the first function argument logged
+// using a custom logging function.
+//
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=true verbosity=1 xray_logfile_base=arg1-logger-" %run %t 2>&1 | FileCheck %s
+//
+// After all that, clean up the XRay log file.
+//
+// RUN: rm arg1-logger-*
+//
+// At the time of writing, the ARM trampolines weren't written yet.
+// XFAIL: arm || aarch64 || mips
+// See the mailing list discussion of r296998.
+// UNSUPPORTED: powerpc64le
+
+#include "xray/xray_interface.h"
+
+#include <cinttypes>
+#include <cstdio>
+
+void arg1logger(int32_t fn, XRayEntryType t, uint64_t a1) {
+  printf("Arg1: %" PRIx64 ", XRayEntryType %u\n", a1, t);
+}
+
+[[clang::xray_always_instrument, clang::xray_log_args(1)]] void foo(void *) {}
+
+int main() {
+  // CHECK: XRay: Log file in 'arg1-logger-{{.*}}'
+
+  __xray_set_handler_arg1(arg1logger);
+  foo(nullptr);
+  // CHECK: Arg1: 0, XRayEntryType 0
+
+  __xray_remove_handler_arg1();
+  foo((void *) 0xBADC0DE);
+  // nothing expected to see here
+
+  __xray_set_handler_arg1(arg1logger);
+  foo((void *) 0xDEADBEEFCAFE);
+  // CHECK-NEXT: Arg1: deadbeefcafe, XRayEntryType 0
+  foo((void *) -1);
+  // CHECK-NEXT: Arg1: ffffffffffffffff, XRayEntryType 0
+}
diff --git a/test/xray/TestCases/Linux/arg1-logging-implicit-this.cc b/test/xray/TestCases/Linux/arg1-logging-implicit-this.cc
new file mode 100644
index 0000000..66dfce9
--- /dev/null
+++ b/test/xray/TestCases/Linux/arg1-logging-implicit-this.cc
@@ -0,0 +1,31 @@
+// Intercept the implicit 'this' argument of class member functions.
+//
+// RUN: %clangxx_xray -g -std=c++11 %s -o %t
+// RUN: rm log-args-this-* || true
+// RUN: XRAY_OPTIONS="patch_premain=true verbosity=1 xray_logfile_base=log-args-this-" %run %t
+//
+// XFAIL: arm || aarch64 || mips
+// UNSUPPORTED: powerpc64le
+#include "xray/xray_interface.h"
+#include <cassert>
+
+class A {
+ public:
+  [[clang::xray_always_instrument, clang::xray_log_args(1)]] void f() {
+    // does nothing.
+  }
+};
+
+volatile uint64_t captured = 0;
+
+void handler(int32_t, XRayEntryType, uint64_t arg1) {
+  captured = arg1;
+}
+
+int main() {
+  __xray_set_handler_arg1(handler);
+  A instance;
+  instance.f();
+  __xray_remove_handler_arg1();
+  assert(captured == (uint64_t)&instance);
+}
diff --git a/test/xray/TestCases/Linux/argv0-log-file-name.cc b/test/xray/TestCases/Linux/argv0-log-file-name.cc
index 1765ce9..2960c57 100644
--- a/test/xray/TestCases/Linux/argv0-log-file-name.cc
+++ b/test/xray/TestCases/Linux/argv0-log-file-name.cc
@@ -2,7 +2,7 @@
 // name.
 
 // RUN: %clangxx_xray -std=c++11 %s -o %t
-// RUN: %run %t > xray.log.file.name 2>&1
+// RUN: XRAY_OPTIONS="patch_premain=true xray_naive_log=true" %run %t > xray.log.file.name 2>&1
 // RUN: ls | FileCheck xray.log.file.name
 // RUN: rm xray-log.* xray.log.file.name
 
diff --git a/test/xray/TestCases/Linux/coverage-sample.cc b/test/xray/TestCases/Linux/coverage-sample.cc
new file mode 100644
index 0000000..623b4e3
--- /dev/null
+++ b/test/xray/TestCases/Linux/coverage-sample.cc
@@ -0,0 +1,88 @@
+// Check that we can patch and unpatch specific function ids.
+//
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=false xray_naive_log=false" %run %t | FileCheck %s
+
+#include "xray/xray_interface.h"
+
+#include <set>
+#include <cstdio>
+
+std::set<int32_t> function_ids;
+
+[[clang::xray_never_instrument]] void coverage_handler(int32_t fid,
+                                                       XRayEntryType) {
+  thread_local bool patching = false;
+  if (patching) return;
+  patching = true;
+  function_ids.insert(fid);
+  __xray_unpatch_function(fid);
+  patching = false;
+}
+
+[[clang::xray_always_instrument]] void baz() {
+  // do nothing!
+}
+
+[[clang::xray_always_instrument]] void bar() {
+  baz();
+}
+
+[[clang::xray_always_instrument]] void foo() {
+  bar();
+}
+
+[[clang::xray_always_instrument]] int main(int argc, char *argv[]) {
+  __xray_set_handler(coverage_handler);
+  __xray_patch();
+  foo();
+  __xray_unpatch();
+
+  // print out the function_ids.
+  printf("first pass.\n");
+  for (const auto id : function_ids)
+    printf("patched: %d\n", id);
+
+  // CHECK-LABEL: first pass.
+  // CHECK-DAG: patched: [[F1:.*]]
+  // CHECK-DAG: patched: [[F2:.*]]
+  // CHECK-DAG: patched: [[F3:.*]]
+
+  // make a copy of the function_ids, then patch them later.
+  auto called_fns = function_ids;
+
+  // clear the function_ids.
+  function_ids.clear();
+
+  // patch the functions we've called before.
+  for (const auto id : called_fns)
+    __xray_patch_function(id);
+
+  // then call them again.
+  foo();
+  __xray_unpatch();
+
+  // confirm that we've seen the same functions again.
+  printf("second pass.\n");
+  for (const auto id : function_ids)
+    printf("patched: %d\n", id);
+  // CHECK-LABEL: second pass.
+  // CHECK-DAG: patched: [[F1]]
+  // CHECK-DAG: patched: [[F2]]
+  // CHECK-DAG: patched: [[F3]]
+
+  // Now we want to make sure that if we unpatch one, that we're only going to
+  // see two calls of the coverage_handler.
+  function_ids.clear();
+  __xray_patch();
+  __xray_unpatch_function(1);
+  foo();
+  __xray_unpatch();
+
+  // confirm that we don't see function id one called anymore.
+  printf("missing 1.\n");
+  for (const auto id : function_ids)
+    printf("patched: %d\n", id);
+  // CHECK-LABEL: missing 1.
+  // CHECK-NOT: patched: 1
+}
diff --git a/test/xray/TestCases/Linux/custom-event-logging.cc b/test/xray/TestCases/Linux/custom-event-logging.cc
new file mode 100644
index 0000000..9bb5d44
--- /dev/null
+++ b/test/xray/TestCases/Linux/custom-event-logging.cc
@@ -0,0 +1,40 @@
+// Use the clang feature for custom xray event logging.
+//
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=false verbosity=1 xray_naive_log=false xray_logfile_base=custom-event-logging.xray-" %run %t 2>&1 | FileCheck %s
+// FIXME: Support this in non-x86_64 as well
+// REQUIRES: x86_64-linux
+// REQUIRES: built-in-llvm-tree
+#include <cstdio>
+#include "xray/xray_interface.h"
+
+[[clang::xray_always_instrument]] void foo() {
+  static constexpr char CustomLogged[] = "hello custom logging!";
+  printf("before calling the custom logging...\n");
+  __xray_customevent(CustomLogged, sizeof(CustomLogged));
+  printf("after calling the custom logging...\n");
+}
+
+void myprinter(void* ptr, size_t size) {
+  printf("%.*s\n", static_cast<int>(size), static_cast<const char*>(ptr));
+}
+
+int main() {
+  foo();
+  // CHECK: before calling the custom logging...
+  // CHECK-NEXT: after calling the custom logging...
+  printf("setting up custom event handler...\n");
+  // CHECK-NEXT: setting up custom event handler...
+  __xray_set_customevent_handler(myprinter);
+  __xray_patch();
+  // CHECK-NEXT: before calling the custom logging...
+  foo();
+  // CHECK-NEXT: hello custom logging!
+  // CHECK-NEXT: after calling the custom logging...
+  printf("removing custom event handler...\n");
+  // CHECK-NEXT: removing custom event handler...
+  __xray_remove_customevent_handler();
+  foo();
+  // CHECK-NEXT: before calling the custom logging...
+  // CHECK-NEXT: after calling the custom logging...
+}
diff --git a/test/xray/TestCases/Linux/fdr-mode.cc b/test/xray/TestCases/Linux/fdr-mode.cc
new file mode 100644
index 0000000..f1e0876
--- /dev/null
+++ b/test/xray/TestCases/Linux/fdr-mode.cc
@@ -0,0 +1,92 @@
+// RUN: %clangxx_xray -g -std=c++11 %s -o %t
+// RUN: rm fdr-logging-test-* || true
+// RUN: rm fdr-unwrite-test-* || true
+// RUN: XRAY_OPTIONS="patch_premain=false xray_naive_log=false xray_logfile_base=fdr-logging-test- xray_fdr_log=true verbosity=1 xray_fdr_log_func_duration_threshold_us=0" %run %t 2>&1 | FileCheck %s
+// RUN: XRAY_OPTIONS="patch_premain=false xray_naive_log=false xray_logfile_base=fdr-unwrite-test- xray_fdr_log=true verbosity=1 xray_fdr_log_func_duration_threshold_us=5000" %run %t 2>&1 | FileCheck %s
+// RUN: %llvm_xray convert --symbolize --output-format=yaml -instr_map=%t "`ls fdr-logging-test-* | head -1`" | FileCheck %s --check-prefix=TRACE
+// RUN: %llvm_xray convert --symbolize --output-format=yaml -instr_map=%t "`ls fdr-unwrite-test-* | head -1`" | FileCheck %s --check-prefix=UNWRITE
+// RUN: rm fdr-logging-test-*
+// RUN: rm fdr-unwrite-test-*
+// FIXME: Make llvm-xray work on non-x86_64 as well.
+// REQUIRES: x86_64-linux
+// REQUIRES: built-in-llvm-tree
+
+#include "xray/xray_log_interface.h"
+#include <cassert>
+#include <chrono>
+#include <cstdio>
+#include <iostream>
+#include <stdlib.h>
+#include <thread>
+#include <time.h>
+
+constexpr auto kBufferSize = 16384;
+constexpr auto kBufferMax = 10;
+
+thread_local uint64_t var = 0;
+[[clang::xray_always_instrument]] void __attribute__((noinline)) fC() { ++var; }
+
+[[clang::xray_always_instrument]] void __attribute__((noinline)) fB() { fC(); }
+
+[[clang::xray_always_instrument]] void __attribute__((noinline)) fA() { fB(); }
+
+int main(int argc, char *argv[]) {
+  using namespace __xray;
+  FDRLoggingOptions Options;
+  std::cout << "Logging before init." << std::endl;
+  // CHECK: Logging before init.
+  auto status = __xray_log_init(kBufferSize, kBufferMax, &Options,
+                                sizeof(FDRLoggingOptions));
+  assert(status == XRayLogInitStatus::XRAY_LOG_INITIALIZED);
+  std::cout << "Init status " << status << std::endl;
+  // CHECK: Init status {{.*}}
+  std::cout << "Patching..." << std::endl;
+  // CHECK: Patching...
+  __xray_patch();
+  fA();
+  fC();
+  fB();
+  fA();
+  fC();
+  std::thread other_thread([]() {
+    fC();
+    fB();
+    fA();
+  });
+  other_thread.join();
+  std::cout << "Joined" << std::endl;
+  // CHECK: Joined
+  std::cout << "Finalize status " << __xray_log_finalize() << std::endl;
+  // CHECK: Finalize status {{.*}}
+  fC();
+  std::cout << "Main execution var = " << var << std::endl;
+  // CHECK: Main execution var = 6
+  std::cout << "Flush status " << __xray_log_flushLog() << std::endl;
+  // CHECK: Flush status {{.*}}
+  __xray_unpatch();
+  return 0;
+}
+
+// Check that we're able to see two threads, each entering and exiting fA().
+// TRACE-DAG: - { type: 0, func-id: [[FIDA:[0-9]+]], function: {{.*fA.*}}, cpu: {{.*}}, thread: [[THREAD1:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE:     - { type: 0, func-id: [[FIDA]], function: {{.*fA.*}}, cpu: {{.*}}, thread: [[THREAD1]], kind: function-exit, tsc: {{[0-9]+}} }
+// TRACE-DAG: - { type: 0, func-id: [[FIDA]], function: {{.*fA.*}}, cpu: {{.*}}, thread: [[THREAD2:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE:     - { type: 0, func-id: [[FIDA]], function: {{.*fA.*}}, cpu: {{.*}}, thread: [[THREAD2]], kind: function-exit, tsc: {{[0-9]+}} }
+//
+// Do the same as above for fC()
+// TRACE-DAG: - { type: 0, func-id: [[FIDC:[0-9]+]], function: {{.*fC.*}}, cpu: {{.*}}, thread: [[THREAD1:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE:     - { type: 0, func-id: [[FIDC]], function: {{.*fC.*}}, cpu: {{.*}}, thread: [[THREAD1]], kind: function-exit, tsc: {{[0-9]+}} }
+// TRACE-DAG: - { type: 0, func-id: [[FIDC]], function: {{.*fC.*}}, cpu: {{.*}}, thread: [[THREAD2:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE:     - { type: 0, func-id: [[FIDC]], function: {{.*fC.*}}, cpu: {{.*}}, thread: [[THREAD2]], kind: function-exit, tsc: {{[0-9]+}} }
+
+// Do the same as above for fB()
+// TRACE-DAG: - { type: 0, func-id: [[FIDB:[0-9]+]], function: {{.*fB.*}}, cpu: {{.*}}, thread: [[THREAD1:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE:     - { type: 0, func-id: [[FIDB]], function: {{.*fB.*}}, cpu: {{.*}}, thread: [[THREAD1]], kind: function-exit, tsc: {{[0-9]+}} }
+// TRACE-DAG: - { type: 0, func-id: [[FIDB]], function: {{.*fB.*}}, cpu: {{.*}}, thread: [[THREAD2:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE:     - { type: 0, func-id: [[FIDB]], function: {{.*fB.*}}, cpu: {{.*}}, thread: [[THREAD2]], kind: function-exit, tsc: {{[0-9]+}} }
+
+// Assert that when unwriting is enabled with a high threshold time, all the function records are erased. A CPU switch could erroneously fail this test, but
+// is unlikely given the test program.
+// UNWRITE: header
+// UNWRITE-NOT: function-enter
+// UNWRITE-NOT: function-exit
diff --git a/test/xray/TestCases/Linux/fdr-thread-order.cc b/test/xray/TestCases/Linux/fdr-thread-order.cc
new file mode 100644
index 0000000..b43a0fe
--- /dev/null
+++ b/test/xray/TestCases/Linux/fdr-thread-order.cc
@@ -0,0 +1,41 @@
+// RUN: %clangxx_xray -g -std=c++11 %s -o %t
+// RUN: rm fdr-thread-order.* || true
+// RUN: XRAY_OPTIONS="patch_premain=false xray_naive_log=false xray_logfile_base=fdr-thread-order. xray_fdr_log=true verbosity=1 xray_fdr_log_func_duration_threshold_us=0" %run %t 2>&1 | FileCheck %s
+// RUN: %llvm_xray convert --symbolize --output-format=yaml -instr_map=%t "`ls fdr-thread-order.* | head -1`" | FileCheck %s --check-prefix TRACE
+// RUN: rm fdr-thread-order.*
+// FIXME: Make llvm-xray work on non-x86_64 as well.
+// REQUIRES: x86_64-linux
+// REQUIRES: built-in-llvm-tree
+
+#include "xray/xray_log_interface.h"
+#include <thread>
+#include <cassert>
+
+constexpr auto kBufferSize = 16384;
+constexpr auto kBufferMax = 10;
+
+thread_local uint64_t var = 0;
+[[clang::xray_always_instrument]] void __attribute__((noinline)) f1() { ++var; }
+[[clang::xray_always_instrument]] void __attribute__((noinline)) f2() { ++var; }
+
+int main(int argc, char *argv[]) {
+  using namespace __xray;
+  FDRLoggingOptions Options;
+  assert(__xray_log_init(kBufferSize, kBufferMax, &Options,
+                         sizeof(FDRLoggingOptions)) ==
+         XRayLogInitStatus::XRAY_LOG_INITIALIZED);
+  __xray_patch();
+  std::thread t1([] { f1(); });
+  std::thread t2([] { f2(); });
+  t1.join();
+  t2.join();
+  __xray_log_finalize();
+  __xray_log_flushLog();
+  // CHECK: =={{[0-9]+}}==XRay: Log file in '{{.*}}'
+}
+
+// We want to make sure that the order of the function log doesn't matter.
+// TRACE-DAG: - { type: 0, func-id: [[FID1:[0-9]+]], function: {{.*f1.*}}, cpu: {{.*}}, thread: [[THREAD1:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE-DAG: - { type: 0, func-id: [[FID2:[0-9]+]], function: {{.*f2.*}}, cpu: {{.*}}, thread: [[THREAD2:[0-9]+]], kind: function-enter, tsc: {{[0-9]+}} }
+// TRACE-DAG: - { type: 0, func-id: [[FID1]], function: {{.*f1.*}}, cpu: {{.*}}, thread: [[THREAD1]], kind: function-exit, tsc: {{[0-9]+}} }
+// TRACE-DAG: - { type: 0, func-id: [[FID2]], function: {{.*f2.*}}, cpu: {{.*}}, thread: [[THREAD2]], kind: function-exit, tsc: {{[0-9]+}} }
diff --git a/test/xray/TestCases/Linux/fixedsize-logging.cc b/test/xray/TestCases/Linux/fixedsize-logging.cc
index 90e7668..eb32afe 100644
--- a/test/xray/TestCases/Linux/fixedsize-logging.cc
+++ b/test/xray/TestCases/Linux/fixedsize-logging.cc
@@ -1,7 +1,7 @@
 // Check to make sure that we have a log file with a fixed-size.
 
 // RUN: %clangxx_xray -std=c++11 %s -o %t
-// RUN: XRAY_OPTIONS="verbosity=1 xray_logfile_base=fixedsize-logging-" %run %t 2>&1 | FileCheck %s
+// RUN: XRAY_OPTIONS="patch_premain=true xray_naive_log=true verbosity=1 xray_logfile_base=fixedsize-logging-" %run %t 2>&1 | FileCheck %s
 //
 // After all that, clean up the output xray log.
 //
diff --git a/test/xray/TestCases/Linux/func-id-utils.cc b/test/xray/TestCases/Linux/func-id-utils.cc
new file mode 100644
index 0000000..17185c3
--- /dev/null
+++ b/test/xray/TestCases/Linux/func-id-utils.cc
@@ -0,0 +1,42 @@
+// Check that we can turn a function id to a function address, and also get the
+// maximum function id for the current binary.
+//
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=false xray_naive_log=false" %run %t
+
+#include "xray/xray_interface.h"
+#include <algorithm>
+#include <cassert>
+#include <cstdio>
+#include <iterator>
+#include <set>
+
+[[clang::xray_always_instrument]] void bar(){}
+
+[[clang::xray_always_instrument]] void foo() {
+  bar();
+}
+
+[[clang::xray_always_instrument]] int main(int argc, char *argv[]) {
+  assert(__xray_max_function_id() != 0 && "we need xray instrumentation!");
+  std::set<void *> must_be_instrumented = {reinterpret_cast<void *>(&foo),
+                                           reinterpret_cast<void *>(&bar),
+                                           reinterpret_cast<void *>(&main)};
+  std::set<void *> all_instrumented;
+  for (auto i = __xray_max_function_id(); i != 0; --i) {
+    auto addr = __xray_function_address(i);
+    all_instrumented.insert(reinterpret_cast<void *>(addr));
+  }
+  assert(all_instrumented.size() == __xray_max_function_id() &&
+         "each function id must be assigned to a unique function");
+
+  std::set<void *> not_instrumented;
+  std::set_difference(
+      must_be_instrumented.begin(), must_be_instrumented.end(),
+      all_instrumented.begin(), all_instrumented.end(),
+      std::inserter(not_instrumented, not_instrumented.begin()));
+  assert(
+      not_instrumented.empty() &&
+      "we should see all explicitly instrumented functions with function ids");
+  return not_instrumented.empty() ? 0 : 1;
+}
diff --git a/test/xray/TestCases/Linux/optional-inmemory-log.cc b/test/xray/TestCases/Linux/optional-inmemory-log.cc
index ef2c43f..f459d5a 100644
--- a/test/xray/TestCases/Linux/optional-inmemory-log.cc
+++ b/test/xray/TestCases/Linux/optional-inmemory-log.cc
@@ -2,7 +2,7 @@
 // we turn it off via options.
 
 // RUN: %clangxx_xray -std=c++11 %s -o %t
-// RUN: XRAY_OPTIONS="verbosity=1 xray_naive_log=false xray_logfile_base=optional-inmemory-log.xray-" %run %t 2>&1 | FileCheck %s
+// RUN: XRAY_OPTIONS="patch_premain=true verbosity=1 xray_naive_log=false xray_logfile_base=optional-inmemory-log.xray-" %run %t 2>&1 | FileCheck %s
 //
 // Make sure we clean out the logs in case there was a bug.
 //
diff --git a/test/xray/TestCases/Linux/pic_test.cc b/test/xray/TestCases/Linux/pic_test.cc
new file mode 100644
index 0000000..09c40b9
--- /dev/null
+++ b/test/xray/TestCases/Linux/pic_test.cc
@@ -0,0 +1,33 @@
+// Test to check if we handle pic code properly.
+
+// RUN: %clangxx_xray -fxray-instrument -std=c++11 -fpic %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=true verbosity=1 xray_logfile_base=pic-test-logging-" %run %t 2>&1 | FileCheck %s
+// After all that, clean up the output xray log.
+//
+// RUN: rm pic-test-logging-*
+
+#include <cstdio>
+
+[[clang::xray_always_instrument]]
+unsigned short foo (unsigned b);
+
+[[clang::xray_always_instrument]]
+unsigned short bar (unsigned short a)
+{
+  printf("bar() is always instrumented!\n");
+  return foo(a);
+}
+
+unsigned short foo (unsigned b)
+{
+  printf("foo() is always instrumented!\n");
+  return b + b + 5;
+}
+
+int main ()
+{
+  // CHECK: XRay: Log file in 'pic-test-logging-{{.*}}'
+  bar(10);
+  // CHECK: bar() is always instrumented!
+  // CHECK-NEXT: foo() is always instrumented!
+}
diff --git a/test/xray/Unit/lit.site.cfg.in b/test/xray/Unit/lit.site.cfg.in
index 1ebc7b9..75ea888 100644
--- a/test/xray/Unit/lit.site.cfg.in
+++ b/test/xray/Unit/lit.site.cfg.in
@@ -10,3 +10,7 @@
 
 config.test_exec_root = "@COMPILER_RT_BINARY_DIR@/lib/xray/tests"
 config.test_source_root = config.test_exec_root
+
+# Do not patch the XRay unit tests pre-main, and also make the error logging
+# verbose to get a more accurate error logging mechanism.
+config.environment['XRAY_OPTIONS'] = 'patch_premain=false verbose=1'
diff --git a/test/xray/lit.cfg b/test/xray/lit.cfg
index 9142ad1..b07dcbd 100644
--- a/test/xray/lit.cfg
+++ b/test/xray/lit.cfg
@@ -16,6 +16,9 @@
 def build_invocation(compile_flags):
   return ' ' + ' '.join([config.clang] + compile_flags) + ' '
 
+# Assume that llvm-xray is in the config.llvm_tools_dir.
+llvm_xray = os.path.join(config.llvm_tools_dir, 'llvm-xray')
+
 # Setup substitutions.
 config.substitutions.append(
     ('%clang ', build_invocation([config.target_cflags])))
@@ -26,6 +29,8 @@
     ('%clang_xray ', build_invocation(clang_xray_cflags)))
 config.substitutions.append(
     ('%clangxx_xray', build_invocation(clang_xray_cxxflags)))
+config.substitutions.append(
+    ('%llvm_xray', llvm_xray))
 
 # Default test suffixes.
 config.suffixes = ['.c', '.cc', '.cpp']
diff --git a/test/xray/lit.site.cfg.in b/test/xray/lit.site.cfg.in
index ee0ffca..73c4eff 100644
--- a/test/xray/lit.site.cfg.in
+++ b/test/xray/lit.site.cfg.in
@@ -5,6 +5,13 @@
 config.xray_lit_source_dir = "@XRAY_LIT_SOURCE_DIR@"
 config.target_cflags = "@XRAY_TEST_TARGET_CFLAGS@"
 config.target_arch = "@XRAY_TEST_TARGET_ARCH@"
+config.built_with_llvm = ("@COMPILER_RT_STANDALONE_BUILD@" != "TRUE")
+
+# TODO: Look into whether we can run a capability test on the standalone build to
+# see whether it can run 'llvm-xray convert' instead of turning off tests for a
+# standalone build.
+if config.built_with_llvm:
+  config.available_features.add('built-in-llvm-tree')
 
 # Load common config for all compiler-rt lit tests
 lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
diff --git a/unittests/lit.common.unit.cfg b/unittests/lit.common.unit.cfg
index 475b22d..b08c1fe 100644
--- a/unittests/lit.common.unit.cfg
+++ b/unittests/lit.common.unit.cfg
@@ -35,6 +35,12 @@
   # of large mmap'd regions (terabytes) by the kernel.
   lit_config.parallelism_groups["darwin-64bit-sanitizer"] = 3
 
-  def darwin_sanitizer_parallelism_group_func(test):
-    return "darwin-64bit-sanitizer" if "x86_64" in test.file_path else ""
-  config.darwin_sanitizer_parallelism_group_func = darwin_sanitizer_parallelism_group_func
+  # The test config gets pickled and sent to multiprocessing workers, and that
+  # only works for code if it is stored at the top level of some module.
+  # Therefore, we have to put the code in a .py file, add it to path, and import
+  # it to store it in the config.
+  import site
+  site.addsitedir(os.path.dirname(__file__))
+  import lit_unittest_cfg_utils
+  config.darwin_sanitizer_parallelism_group_func = \
+    lit_unittest_cfg_utils.darwin_sanitizer_parallelism_group_func
diff --git a/unittests/lit_unittest_cfg_utils.py b/unittests/lit_unittest_cfg_utils.py
new file mode 100644
index 0000000..ff7b1ee
--- /dev/null
+++ b/unittests/lit_unittest_cfg_utils.py
@@ -0,0 +1,4 @@
+# Put all 64-bit sanitizer tests in the darwin-64bit-sanitizer parallelism
+# group. This will only run three of them concurrently.
+def darwin_sanitizer_parallelism_group_func(test):
+  return "darwin-64bit-sanitizer" if "x86_64" in test.file_path else ""